私が次の問題を解決したい主なこと:
1。応募と呼び出しの違いは何ですか
2。適用のその他の巧妙な用途(通常、どのような状況で使用できるかを使用)
私は最初にインターネットからの適用と呼び出しの定義を見つけ、次にこれらの2つの方法の意味とそれらの使用方法を説明するために例を使用しました。
適用:この方法は、別のオブジェクトのメソッドをハイジャックし、別のオブジェクトのプロパティを継承できます。
function.apply(obj、args)メソッドは2つのパラメーターを受信できます
OBJ:このオブジェクトは、関数クラスでこのオブジェクトを置き換えます
args:これは配列であり、関数の議論として渡されます(args-> arguments)
呼び出し:適用と同じを意味しますが、パラメーターリストは異なります。
function.call(obj、param1、param2、…、paramn)
OBJ:このオブジェクトは、関数クラスでこのオブジェクトを置き換えます
パラメーション:これはパラメーターリストです
適用例:
<script type = "text/javascript">/*human*/function person(name、age){this.name = name; this.age = age;} /*学生クラスを定義* /functionStudent(name、age、grade){person.apply(this、arguments); this.grade = grade;} //学生クラスの作成var学生( "qian"、21、 "first grad"); // test alert( "name:"+sudint.name+"/n"+"age:"+sustent.age+"/n"+"grade:"+desudent.greade);なぜこれら2つの属性に値があるのですか?これは適用の魔法です。</script>分析:person.Apply(this、arguments);
これ:オブジェクトを作成するとき、それは学生を表します
引数:アレイ、つまり["qian"、 "21"、 "1年生"];
言い換えれば、素人の用語では、それは次のとおりです。学生を使用して、人クラスのコンテンツを実行します。属性が学生オブジェクトに作成されるように、as.name in persen Classのようなステートメントがあります。
コール例
Studen関数では、以下に適用を変更できます。
person.call(this、name、age);
違い
オブジェクトパラメーターを指定する場合、パラメーター形式が配列である場合、たとえば、パラメーター引数がApply例に渡される場合、このパラメーターは担当者を呼び出す場合、パラメーターリストは同じに対応しています(つまり、人と学生のパラメーターリストの最初の2桁が一貫しています)。私の人のパラメーターリストがこのようなもの(年齢、名前)であり、学生のパラメーターリストが(名前、年齢、成績)である場合、これは呼び出しによって達成できます。つまり、パラメーターリストの対応する値(Person.Call(この、年齢、名前、グレード)の位置を直接指定することができます。
適用の他の賢い用途
慎重な人は、Applyメソッドを呼び出すと、最初のパラメーターがオブジェクト(This)であり、2番目のパラメーターが配列コレクションであることに気付いた場合があります。
人を呼び出すとき、彼が必要とするのは配列ではありませんが、なぜ彼は私に配列を与えてくれますか?
これは、適用の巧妙な使用です。デフォルト([param1、param2、param3]に配列をパラメーターリストに変換できます。プログラムを使用して、配列内の各アイテムをパラメーターリストに置き換える実装を実装すると、しばらくかかる場合があります。この適用機能の助けを借りて、次の効率的な方法があります。
a)math.maxは、配列で最大のアイテムを達成できます
Math.maxパラメーターはmath.max([param1、param2])をサポートしていないため、アレイ
ただし、Math.max(param1、param2、param3 ...)をサポートしているため、var max = math.max.apply(null、array)の問題を現在適用することで解決できます。
(Applyは配列アセンブリを1つのパラメーターに置き換え、次々とメソッドに渡します)
この部分が呼び出されると、最初のパラメーターにヌルが与えられます。これは、このメソッドを呼び出すオブジェクトがないためです。この方法を使用して、計算して返された結果を取得するのに役立つ必要があります。だから私は直接ヌルを渡しました
b)math.minは配列内の最小のアイテムを達成できます
また、それはマックスと同じです
var min = math.min.apply(null、array);
c)array.prototype.pushは、2つの配列の組み合わせを実装できます
プッシュメソッドはアレイをプッシュすることはありませんが、プッシュ(param1、param、…paramn)を提供するため、適用して配列をインストールして交換することもできます。
vararr1 = new Array( "1"、 "2"、 "3"); vararr2 = new Array( "4"、 "5"、 "6"); array.prototype.push.apply(arr1、arr2);
また、この方法で理解することができ、ARR1はプッシュメソッドを呼び出し、パラメーターは配列アセンブリをパラメーターリストのセットに適用することで置き換えられます。
上記は、編集者がもたらすキー入力コールの完全な理解です。誰もがwulin.comをサポートできることを願っています〜