1.call
文法
コール([thisObj [、ARG1 [、ARG2 [[、.argN]]]]])
パラメータ
thisObjオプション。これは、現在のターゲットオブジェクトとして使用されます。
ARG1、ARG2 ,, ARGNオプション。メソッドのパラメータ列が渡されます。
説明
この方法は、他の目的は、メソッドを呼び出す呼び出す代わりに使用することができます。この方法は、初期thisObjコンテキストの変化から新しいオブジェクトによって指定されたオブジェクトコンテキストの機能を呼び出すことができます。無thisObjパラメータ場合は、[グローバルオブジェクトはthisObjとして使用されています。
2.apply
文法
コール([thisObj [、ARG1 [、ARG2 [[、.argN]]]]])
パラメータ
thisObjオプション。これは、現在のターゲットオブジェクトとして使用されます。
引数[]配列、メソッドパラメータが渡されます
説明
同じであるが、渡された2番目のパラメータはアレイ内に渡される複数のパラメータの組み合わせであるパラメータ配列、から第2の呼を適用少し異なる最初の引数を意味する、ほぼ同じ機能を適用し、呼び出し引数は、呼び出される関数に渡されたパラメータの値に続いて、始めました
3.call差法および方法を適用します
同じ点:二つの方法による効果は、全く同じである現在のサブジェクト関数呼び出しを変更するために使用されます。
異なる点:コールの異なるパラメータ:
//以下の3行同じ効果
foo.call(この、ARG1、ARG2、 ARG3)== foo.apply(この引数)== this.foo(ARG1、ARG2、ARG3)
そして、アクション4.callの方法を適用します
ロールコール方法
1.この点を修正
2.継承
//例1 window.color = '赤'; document.color = '黄色'; VaRのS1 = {色: '青'}。 関数changeColor(){ にconsole.log(this.color)。 } changeColor.call()。//赤(默认传递参数为globalObj) changeColor.call(ウィンドウ)。//赤 changeColor.call(文書)。//黄色 changeColor.call(この); //赤色 changeColor.call(S1)。//青 //例2 VARペット= { 言葉: '... ' 話す:機能(例えば){ はconsole.log(たとえば+ '' + this.words) } } Pet.speak(''話します)。//结果:話す... VARの犬= { 言葉を」 } このポイントに変更する//犬だろう Pet.speak.call(犬、「話す」); //結果:SpeakWang
//例3
関数FriendA(名){
this.name =名。
this.say =関数(){
にconsole.log( 'こんにちは');
}
}
関数FriendB(){
にconsole.log(本)
FriendA.call(この、 'ルーシー');
console.log(この);
}
例3コンソール:
FriendBはFriendAのメソッドとプロパティを継承します