2013-10-02 148 views
1

我只是用bind方法來更正我的JavaScript類中的作用域問題,該方法將setInterval調用的函數放在正確的作用域中。但是它的綁定早已到來(1.8.4我認爲),我擔心瀏覽器的兼容性。JavaScript setInterval範圍問題:替代綁定

有沒有另一個更舊的選擇?我應該忘記舊的瀏覽器嗎?

例子:

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(); 

回答

5

另一種方法是一個很好的醇」關閉:

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

不完全是漂亮,但確實工作跨瀏覽器。

如果你想要類似bind的東西,你可以創建自己的函數來做到這一點,或使用the polyfill found at MDN。如果你使用的是jQuery,你可以使用$.proxy,它可以做同樣的事情。

+2

+1擊敗我15秒。如果您使用jQuery,則有'$ .proxy'。 [MDN]上還有一個'bind' polyfill(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) – elclanrs

+0

謝謝,在評論中添加了信息答案,完整性。 – bfavaretto

+0

所以這是一個原型使用限制,如果我們想讓它在舊的瀏覽器中工作。謝謝。 – Gustavo