JavaScript - не можете использовать методы объекта при вызове внутри функции, которая проходит через интервал? - PullRequest
0 голосов
/ 01 сентября 2011

Я получаю неопределенную функцию, когда пытаюсь сделать следующее (упрощено для удобства чтения)

function object() {
  this.bar = function() { };

  this.foo = function() {
    this.bar();
  };

  this.z = setInterval(this.foo, 1000);

}

Этот код выдает «неопределенную функцию this.bar ()» при выполнении из интервала, но не при вызове this.foo вне интервала.

Как мне этого добиться?

1 Ответ

2 голосов
/ 01 сентября 2011

Это правильно - вы не можете сделать это таким образом.Указатель this не будет установлен правильно при вызове из setInterval() (возможно, он установлен для указания на глобальный объект window).Вы можете изменить свой код следующим образом, чтобы решить проблему:

function object() {
  this.bar = function() { };

  this.foo = function() {
    this.bar();
  };
  var self = this;   // save reference to local object in variable other than 'this'

  this.z = setInterval(function() {
    self.foo();      // call method on local object
  }, 1000);

}
...