call と apply はどちらも コンテキスト 、つまり関数の実行時のコンテキストを変更するために存在します。つまり、関数本体内の this のポインタを 変更するためのものです。
callとapplyは全く同じ機能を持っていますが、パラメータの受け取り方が異なります。
メソッド定義apply
Function.apply(obj,args)メソッドは2つのパラメータを受け取ることができます:
このオブジェクトはFunctionクラスのこのオブジェクトを置き換えます
This配列または配列に似たもので、apply メソッドはこのコレクション内の要素をパラメーターとして呼び出し先の関数に渡します。
callの最初のパラメータは、2番目のパラメータがパラメータリストであることを除いてapplyメソッドと同じです
非厳密モードでは、最初のパラメータがnull または未定義として渡されると、関数本体のこれはデフォルトのホスト オブジェクトを指します。これは、ブラウザーでは window
var test = function(){ console.log(this===window); } test.apply(null);//true test.call(undefined);//true
time
のlogNameメソッドはbarによって参照され、thisは継承を実装するためにbar
var foo = { name:"mingming", logName:function(){ console.log(this.name); } } var bar={ name:"xiaowang" }; foo.logName.call(bar);//xiaowang
function Animal(name){ this.name = name; this.showName = function(){ console.log(this.name); } } function Cat(name){ Animal.call(this, name); } var cat = new Cat("Black Cat"); cat.showName(); //Black Cat
fun
メソッドがあります。 fun が通常の関数として呼び出されるとき、 fun 内の this は window を指しますが、多くの場合、#test ノードを指す必要があります。次のコード:
window.id="window"; document.querySelector('#test').onclick = function(){ console.log(this.id);//test var fun = function(){ console.log(this.id); } fun();//window }
を使用すると、この問題を簡単に解決できます
window.id="window"; document.querySelector('#test').onclick = function(){ console.log(this.id);//test var fun = function(){ console.log(this.id); } fun.call(this);//test }
のstrictモードで、この場合、これはグローバル オブジェクトをポイントしないように規定されていますが、未定義:
window.id="window"; document.querySelector('#test').onclick = function(){ var that = this; console.log(this.id);//test var fun = function(){ console.log(that.id); } fun();//test }
function func(){ "use strict" alert ( this ); // 输出:undefined } func();
以上が関数本体の内部ポイントを変更するJavaScriptのアプリケーションと呼び出し使用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。