)(()&コールを適用
それは、一度コーディングや呼び出しに適用するために来る前に、今日整理する時間は、二つの方法の違いや使用を整理するためにアイドル時間を利用して、ありませんでした。
実際には、すべての関数は、(関数が適用有する)及び()メソッドの呼び出し、それらの役割は、特定の関数であると同様に、in vivoでこの機能の設定点に等しく、範囲を呼び出し
定義
適用:オブジェクトメソッドの呼び出しを、他のオブジェクトと現在のオブジェクトを置き換えます。例えば:B.apply(A、引数);即ち、Bオブジェクトアプリケーションオブジェクトメソッド。
呼び出し:オブジェクトのメソッドを呼び出すと、別のオブジェクトと現在のオブジェクトを置き換えます。例えば:B.call(A、args1、args2)、すなわち、オブジェクトAコールはBメソッドオブジェクト
ように定義から見て、適用の両方別のオブジェクトと現在のオブジェクトを置き換える、オブジェクトのメソッドを呼び出す呼び出しすることができます。差は、伝送パラメータは、2つのパラメータのみの最大適用することである - 配列は例外TypeErrorの引数がエラーでない場合は、このオブジェクトargArrayの新しい配列を、
コール・複数のパラメータを渡すと、最初のパラメータを適用することができ、オブジェクトが引数リストの後ろにある交換するために使用されます。
基本的な構文
/ * 方法)(適用されます* / function.apply(thisObj [、argArray]) / * ()の呼び出し方法* / function.call(thisObj [、引数1 [、arg2の[、[、... ARGN]]]]) ;
使用例
適用されます()
{PET(ワード)機能 この .words = 言葉を、 この .speak = 関数(){ にconsole.log(この.words) } } 関数犬(ワード){ // Pet.call(この単語)。// 结果:王 Pet.apply(この、引数); // 结果:王 } VARの犬= 新しい犬(' 王' ); dog.speak();
コール()
<!DOCTYPE HTML> <HTML> <HEAD> <メタのcharset = " UTF-8 " > <タイトル> </ TITLE> </ HEAD> <BODY> </ BODY> <スクリプトタイプ= " テキスト/ javascriptの" > VAR OBJ = { 名:" liSenは" 、 話す:機能(例えば){ はconsole.log(たとえば + " " + この.nameの) } } OBJを。(話す「こんにちは」); // 結果:スピークLisen VAR obj2が= { 名:" riwen " } // この呼び出しの変化点の使用 obj.speak.call(OBJ2、" こんにちは"); // 結果を:こんにちはriwen </ SCRIPT> < / HTML>
異なる点:さまざまな方法受信したパラメータ。
- 適用()メソッドは 、パラメータの他の配列を実行する2つのパラメータ範囲である(本)関数を取ります。
構文:apply([thisObj [,argArray] ]);
オブジェクトのメソッドを呼び出して、別のオブジェクト2は、現在のオブジェクトを置換します。
注意:有効な配列argArray引数がオブジェクトかいないいない場合は、これがもたらすであろう
任意のパラメータはTypeError、ノーargArray thisObj場合、そのオブジェクトはグローバルthisObjとして使用されています。
- ()メソッドを呼び出し 、最初のパラメータを、同じ()メソッドを適用しますが、列挙された関数に渡さなければなりません。
構文:call([thisObject[,arg1 [,arg2 [,...,argn]]]]);
オブジェクトの適用方法、他のオブジェクトと現在のオブジェクトを置き換えます。
説明: なしthisObjパラメータ、オブジェクトがグローバルthisObjのために使用されていない場合Callメソッドはなく、別のオブジェクトのメソッドへの呼び出しを使用してもよい、オブジェクトは、コンテキスト指定された初期thisObjから新しいオブジェクトコンテキストの変更のためのメソッド呼び出し関数とすることができます
他のいくつかの巧妙な使用法を適用します
(1)Math.maxはの最大値を達成するために、配列を取得することができます。
Math.maxはMath.maxをサポートしていないので([PARAM1、PARAM2])は、配列であるが、それは(PARAM1、PARAM2 ...)、VAR最大= Math.maxは特性が適用に応じて解決することができるMath.maxをサポートしています。あなたは簡単に配列を適用します(アレイ内で最大のエントリを取得することができるように、(ヌル、配列)を適用する一つのパラメータによってパラメータに変換されます
いくつかの方法を転送する方法)
ヌルへの呼び出しで場合は、この最初のパラメータ、何のオブジェクトは、このメソッドを呼び出していないするので、私は私の運転を支援するために、このメソッドを使用して、結果がラインに戻ったので、直接的には、過去にはnullを渡します。
この方法はまた、得られた配列内の最小のエントリを用いて達成することができる。Math.min.apply(ヌル、アレイ)
<スクリプトタイプ= " テキスト/ JavaScriptを" > // 配列内の最大アイテム検索 するvar = ARRを[ 1。 、3、5、7、8、9、12は、45 ]; VARの最大= Math.max.apply(NULL 、 ARR) はconsole.log(MAX); // 最小配列検索 するvar分= Math.min.apply(ヌル、ARR) はconsole.log(分); </ SCRIPT>
(2)Array.prototype.push 2つの配列を実現することができるマージ
同じプッシュ方式は、プッシュのアレイを提供しないが、それは(PARAM1、PARAM2 ... paramNの)プッシュを提供し、またすなわち、この配列ならば変更し適用することができます。
VAR ARR1の= 新しい新しいアレイ(" 1 "、" 2 "、" 3。" ); VARの ARR2は=である新規新しいアレイ(" 4 "、" 5 "、" 6 " ); Array.prototype.push.apply(ARR1の、ARR2です) ; // そのままリターン配列の長さを押して、アレイの組み合わされた長さを取得します