1

setInterval によって呼び出される関数を正しいスコープに配置する bind メソッドを使用して、JavaScript クラスのスコープの問題を修正しただけです。しかし、バインドの縫い目が早くなり(1.8.4だと思います)、ブラウザの互換性が心配です。

別の古い代替手段はありますか?古いブラウザのことは忘れるべきですか?

例:

function MyClass(SomeText){
  this.text = SomeText;
}

MyClass.prototype.test = function(){
  console.log("The text: "+this.text);
}

MyClass.prototype.initialize = function(){
  setInterval(this.test.bind(this), 1000);
}

var Test = new MyClass("my thoughts");
Test.initialize();
4

1 に答える 1

5

別の方法は、古き良きクロージャーです。

MyClass.prototype.initialize = function(){
    var myClassInstance = this;
    setInterval(function() {
        myClassInstance.test()
    }, 1000);
}

きれいではありませんが、クロスブラウザーで動作します。

バインドに似たものが必要な場合は、それを行う独自の関数を作成するか、MDN にあるポリフィルを使用できます。jQuery を使用している場合$.proxyは、同じことを行う を使用できます。

于 2013-10-02T22:33:12.253 に答える