JavaScript setInterval неправильно привязан к правильному закрытию
Привет люди, я довольно плохо знаком с JavaScript, и я из очень объектно-ориентированного мира Python и Java, это мой отказ от ответственности.
Ниже представлены два фрагмента кода, альтернативные реализации, один на JavaScript, другой на Coffeescript. Я пытаюсь запустить их на сервере в приложении Meteor.js. Проблема, с которой я сталкиваюсь, заключается в том, что при вызове функции «setInterval» с использованием привязанного метода «this.printSomething» в качестве моего обратного вызова, после выполнения этого обратного вызова он теряет область видимости, в результате чего экземпляр «this.bar» становится неопределенным! Может кто-нибудь объяснить мне, почему не работает JavaScript или код coffescript?
Реализация JavaScriptfunction Foo(bar) {
this.bar = bar;
this.start = function () {
setInterval(this.printSomething, 3000);
}
this.printSomething = function() {
console.log(this.bar);
}
}
f = new Foo(5);
f.start();
Реализация Coffeescriptclass foo
constructor: (bar) ->
@bar = bar
start: () ->
Meteor.setInterval(@printSomething, 3000)
printSomething: () ->
console.log @bar
x = new foo 0
x.start()