我只是使用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();
答案 0 :(得分:5)
替代方案是一个很好的关闭:
MyClass.prototype.initialize = function(){
var myClassInstance = this;
setInterval(function() {
myClassInstance.test()
}, 1000);
}
不是很漂亮,但可以跨浏览器工作。
如果你想要类似于bind的东西,你可以创建自己的函数来做到这一点,或者使用the polyfill found at MDN。如果你正在使用jQuery,你可以使用$.proxy
,它可以做同样的事情。