неопределенная функция при доступе из асинхронной функции

1

Я не понимаю, почему, когда я устанавливаю функцию в экземпляр объекта, всякий раз, когда он получает доступ к чему-то асинхронному, например 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
  • 0
    Ваша проблема может быть уменьшена до: function A() { this.x = 42; this.foo = function () { console.log(this.x); }; } var obj = new A(); var f = obj.foo; f();
Теги:

1 ответ

0
Лучший ответ

Потому что вы теряете контекст здесь:

setTimeout(this.check, 1000);

Таким образом, this внутренняя check будет window, которое не имеет свойства test. Может быть:

setTimeout(this.check.bind(this), 1000);

Замечание: динамически назначенные функции - это убийца производительности и, следовательно, плохой стиль. Всегда лучший способ...

  • 0
    @melpoleme спасибо, извините за отмену ваших изменений; /
  • 0
    спасибо, я понял Я использую nativescript, и у меня были проблемы с запуском события из самодельных объектов. Мне нужно вызвать обновление пользовательского интерфейса, когда происходят определенные вещи, я думал, что это обходной путь.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню