Я не понимаю, почему, когда я устанавливаю функцию в экземпляр объекта, всякий раз, когда он получает доступ к чему-то асинхронному, например setTimeout или обещанию, он не определен. Может кто-нибудь объяснить? Есть ли обходной путь?
Спасибо
function Animal() {
this.check = function () {
writeln(typeof this.test);
}
setTimeout(this.check, 1000); // returns undefined
}
var animal = new Animal();
animal.test = function () {
}
animal.check(); // returns function
Потому что вы теряете контекст здесь:
setTimeout(this.check, 1000);
Таким образом, this
внутренняя check
будет window
, которое не имеет свойства test
. Может быть:
setTimeout(this.check.bind(this), 1000);
Замечание: динамически назначенные функции - это убийца производительности и, следовательно, плохой стиль. Всегда лучший способ...
function A() { this.x = 42; this.foo = function () { console.log(this.x); }; } var obj = new A(); var f = obj.foo; f();