开发者问题收集

JavaScript SetInterval范围问题:绑定的替代方案

2013-10-02
2364

我刚刚用 bind 方法纠正了我的 JavaScript 类中的一个范围问题,该方法将 setInterval 调用的函数放在了正确的范围内。但似乎 bind 出现得太早了(我认为是 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();
1个回答

另一种选择是使用老式的闭包:

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

虽然不太美观,但可以跨浏览器使用。

如果您想要类似 bind 的功能,可以创建自己的函数来执行此操作,或者使用 MDN 上的 polyfill 。如果您使用的是 jQuery,则可以使用 $.proxy ,效果相同。

bfavaretto
2013-10-02