JavaScript setInterval范围问题:bind的替代方法

Gus*_*avo 1 javascript scope class setinterval

我只是使用bind方法纠正我的JavaScript类中的范围问题,该方法将setInterval调用的函数放在正确的范围内.但它接缝绑定早了(我认为是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();
Run Code Online (Sandbox Code Playgroud)

bfa*_*tto 5

替代方案是一个很好的关闭:

MyClass.prototype.initialize = function(){
    var myClassInstance = this;
    setInterval(function() {
        myClassInstance.test()
    }, 1000);
}
Run Code Online (Sandbox Code Playgroud)

不是很漂亮,但跨浏览器工作.

如果你想要类似于bind的东西,你可以创建自己的函数来做到这一点,或者使用在MDN上找到的polyfill.如果你正在使用jQuery,你可以使用$.proxy,它做同样的事情.

  • +1击败我15秒.如果你使用jQuery,那就是`$ .proxy`.在[MDN]上还有一个`bind` polyfill(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) (2认同)