2013-10-02 2 views
1

Я просто исправлю проблему с областью в моем классе 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» (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) – elclanrs

+0

Спасибо, добавили информацию из вашего комментария в ответ, для полноты. – bfavaretto

+0

Итак, это ограничение использования прототипа, если мы хотим сохранить его в старых браузерах. Благодарю. – Gustavo

Смежные вопросы