それはパフォーマンスではなく、オブジェクトの特定のインスタンスのプロパティにアクセスすることです:-
x.init()
関数で使用していない場合、「test」は表示されませんthis
。
事実上、上記の行は次と同じです:-
x.init.call(x);
を使用する最初のパラメーターは、関数の実行時にcall
割り当てられます。this
今考えてみましょう:-
var fn = x.init; //Note no () so the function itself is assigned to the variable fn
fn();
これで、アラートに何も表示されなくなりました。これは、上記が効果的であるためです:-
fn.call(window);
ブラウザでホストされる Javascript では、window
オブジェクトはグローバル オブジェクトと同義です。関数が "in the raw" で呼び出されると、this
デフォルトでグローバル オブジェクトになります。
古典的なエラーは、次のようなことをしています:-
var x = {
ele: 'test';
init: function(elem) {
elem.onclick = function() { alert(this.ele); }
}
}
x.init(document.getElementById('myButton'));
ただし、onclick イベントに関連付けられた関数が次のようなコードを使用してブラウザーによって呼び出されるため、これは機能しません。
onclick.call(theDOMElement)
したがって、関数が実行されているときはthis
、あなたが思っているものではありません。
この状況に対する私の通常の解決策は次のとおりです。
var x = {
ele: 'test';
init: function(elem) {
var self = this;
elem.onclick = function() { alert(self.ele); }
elem = null;
}
}
x.init(document.getElementById('myButton'));
elem = null
IE メモリ リークの回避策であることに注意してください。