Javascript переменная this, переключающаяся с конкретного объекта на DOMWindow - PullRequest
1 голос
/ 10 августа 2011

У меня есть проблема с Javascript, заставляющим [объект DOMWindow] в функцию, которую я имею в прототипе объекта.Полная ошибка, которую я получаю ниже:

Uncaught TypeError: Object [object DOMWindow] has no method 'positionconvert'

В основном то, что я делаю, находится внутри прототипа объекта при определенных условиях, я создаю var interval, который отсчитывается с помощью window.setInterval():

var interval = window.setInterval(this.alertanimate, 500);

функция alertanimate находится внутри того же прототипа и использует переменную this в этой строке:

this.positionconvert(this.alerticon, -69, 55);

(positionconvert - это еще одна функция, а alerticon - это объект).Проблема в том, что когда я включаю window.setInterval, js начинает предполагать, что this - это DOM, а не прототип объекта, как я и предполагал, с указанной выше ошибкой.Когда я жестко программирую это для работы с конкретным объектом, это работает, но где-то в этой переменной-переменной переменная this теряет связь с объектом.Надеюсь, все это имеет смысл?Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 10 августа 2011

Передача this.alertanimate в setIntervall теряет связь с основным объектом. То, на что this ссылается в функции, полностью определяется как как вызывается функция. Если вы передадите функцию в setTimeout, то this будет ссылаться на window.

Вы можете сделать:

var self = this;

window.setInterval(function() {
    self.alertanimate();
}, 500);

В новых браузерах вы также можете использовать .bind() [MDN] (см. Документацию для альтернативной реализации):

window.setInterval(this.alertanimate.bind(this), 500);
1 голос
/ 10 августа 2011

Добро пожаловать в JavaScript. this перепривязывается каждый раз, когда вы вводите область действия функции.


    var outer = function() {
      var that = this;
      // that and this refer to the same object: outer
      var inner = function() {
        // now that refers to outer and this refers to inner
        ...
      }
      // that and this again refer to the same object: outer
      ...
    }

Вы не опубликовали свой полный код, но я подозреваю, что один из ваших внутренних this не означает, что вы думаете, что он делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...