SetInterval и Prototype JS [дубликат]

220
30 ноября 2017, 04:00

На данный вопрос уже ответили:

  • Потеря контекста вызова 5 ответов

Здравствуйте, помогите пожалуйста.Есть код который должен каждый раз увеличить значение i, но если в setinterval писать функцию без скобок он выводит NaN каждые 1000 миллисекунд , а если со скобками то 0 но один раз. Как исправить так, чтобы выводилась как счетчик?

function Up() {
  this.i = 0;
}
Up.prototype.method = function() {
  console.log(this.i++);
}
var up= new Up();
setInterval(up.method, 1000);

Я понимаю так - на строке (var up = new Up();) создается экземпляр объекта Up, на следующей строке в этом экземпляре вызывается метод method, так как в этом экземпляре его нет, мы поднимаемся в прототип и там находим метод method и выполняем его, но он почему то результат NaN

Answer 1

Если посмотреть что есть this внутри функции method, то видно, что проблема классическая - https://stackoverflow.com/questions/13224620/the-this-keyword-returns-the-window-object-within-an-objects-prototype-in-jav

Решение там же, тем не менее это работает:

function Up() {
    this.i = 0;
  this.method = () => { this.i++; console.log(this.i) };
}
var up = new Up();
setInterval(up.method, 1000);
READ ALSO
Node js игнорирует if

Node js игнорирует if

Привет, подробно изучал Steam-user, хочу создавать аккаунты, но node игнорирует ifКод:

322