2

and呼び出しthisの中でどのように使用できますか?setIntervalsetTimeout

私はそれを次のように使いたい:

function myObj() {
  this.func = function(args) {
    setTimeout(function() { 
      this.func(args);
    }, 1000);
  }
}

少し前に、私は.onclickこのようにイベントのためにそれをしました:

this.click = function(func) {
  this.elem.onclick = (function(func, obj) {return function(){func.apply(obj)} })(func,this);
};

intervalsしかし、とに対してどうすればよいかわかりませんtimeouts

4

2 に答える 2

9

this最も簡単な方法は、ローカルに保存することです。localは、コールバックが呼び出されるselfコンテキストによって変更されません。代わりに元の値を維持しますsetIntervalsetTimeoutthis

function myObj() {
  var self = this;
  this.func = function(args) {
    setTimeout(function() { 
      self.func(args);
    }, 1000);
  }
}
于 2012-07-06T17:08:02.407 に答える
1

理論的には、どこでも引き続き使用して、次のようにthis回避することができます。thatself

setTimeout.call(this, function() { 
  this.func(args);
}, 1000);

...また...

setTimeout.apply(this, [function() { 
  this.func(args);
}, 1000]);

...しかし、これを行うと、Firefox 22以降で次のエラーが発生します。

NS_ERROR_XPC_BAD_OP_ON_WN_PROTO : WrappedNativeプロトタイプ オブジェクトに対する不正な操作


jQuery 1.4+ を使用している場合は、 orjQuery.proxy()の代わりに使用することでこれを回避できます。callapply

setTimeout( $.proxy(function() {
  this.func(args);
}, this), 50);

この他の回答には、ネイティブ ECMAScript 5Underscore.jsprototype.jsを使用した詳細と代替手段があります。

于 2013-12-02T12:12:25.817 に答える