var user = {
name: 'Иван',
age: 16,
runUpAge: function () {
setInterval(function () {
this.age = ++this.age;
console.log(this.age);
}, 1000);
}
}
user.runUpAge();
Asked
Active
Viewed 39 times
0
Anon
- 3
-
Не ясна суть вопроса. Можно конкретнее? – Yuri Dec 12 '16 at 18:20
1 Answers
0
Дайте угадаю, вы хотите что бы функция runUpAge меняла поле age у объекта, а она не меняет, к тому же вообще ошибки выкидывать может.
Почему же так? Потому что вы используете setInterval и анонимную функцию, которая не сохраняет ссылку на this. Решения два
1) Старое
var user = {
name: 'Иван',
age: 16,
runUpAge: function () {
var self = this; // руками сохраняем ссылку
setInterval(function () {
self.age = ++self.age;
console.log(self.age);
}, 1000);
}
}
user.runUpAge();
2) Модное, новое
В спецификации es6 ввели стрелочные функции, которые сохраняют ссылку на тот this, в контексте которого они были созданы
var user = {
name: 'Иван',
age: 16,
runUpAge: function () {
setInterval(() => {
this.age = ++this.age;
console.log(this.age);
}, 1000);
}
}
user.runUpAge();
ThisMan
- 12,261