Ответ 1
В отличие от языка, такого как Python, метод Javascript забывает, что это метод после его извлечения и передачи его в другом месте. Вы можете либо
Оберните вызов метода внутри анонимной функции
Таким образом, доступ к свойству baz
и его вызов происходит в одно и то же время, что необходимо для правильной установки this
внутри вызова метода.
Вам нужно будет сохранить this
из внешней функции в вспомогательной переменной, так как внутренняя функция будет ссылаться на другой объект this
.
var that = this;
setInterval(function(){
return that.baz();
}, 1000);
Оберните вызов метода внутри функции толстой стрелки
В реализациях Javascript, которые реализуют функцию arrow функции, можно написать вышеприведенное решение более кратким образом, используя стрелку жира синтаксис:
setInterval( () => this.baz(), 1000 );
Анонимные функции Fat arrow сохраняют this
от окружающей функции, поэтому нет необходимости использовать трюк var that = this
. Чтобы узнать, можете ли вы использовать эту функцию, обратитесь к таблице совместимости, например этот.
Используйте функцию привязки
Конечной альтернативой является использование функции, такой как Function.prototype.bind или эквивалента из вашей любимой библиотеки JavaScript.
setInterval( this.baz.bind(this), 1000 );
//dojo toolkit example:
setInterval( dojo.hitch(this, 'baz'), 100);