9

古い方法:

var self = this;    
setTimeout(function(){
  console.log(self);
}, 5000);

jQuery の場合:

setTimeout($.proxy(function(){
  console.log(this);
}, this), 5000);

バインドあり:

setTimeout((function(){
  console.log(this);
}).bind(this), 5000);

通話あり:

setTimeout((function(){
  console.log(this);
}).call(this), 5000);

apply も機能するようです:

setTimeout((function(){
  console.log(this);
}).apply(this), 5000);

http://jsfiddle.net/SYajz/1/

これらの方法の間にそれほど明白ではない違いがあるかどうか疑問に思っていました

4

2 に答える 2

4

$.proxyと を使用して、指定した値にバインドされた値を.bind()持つ新しい関数を作成しています。thisこれが に渡される関数ですsetTimeout()


で、すぐに関数を呼び出すので、タイマーを待つことは.call()あり.apply()ません。

それらがタイマーを操作するには、提供された値を参照する変数を閉じ、参照された指定されたthisを呼び出す関数を返す必要があります。console.log()this

setTimeout((function(){
  var that = this;
  return function() {
      console.log(that);
  }
}).call(this), 5000);
于 2013-06-09T22:20:18.927 に答える