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

JavaScript setInterval scope issue: an alternative to bind

本文关键字:方案 绑定 setInterval 范围 问题 JavaScript      更新时间:2023-09-26

我只是用绑定方法纠正了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();

另一种选择是好的闭包:

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

不是很漂亮,但确实可以跨浏览器工作。

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