JavaScript setInterval no está correctamente vinculado al cierre correcto
Hola gente, soy bastante nuevo en JavaScript y provengo del mundo muy orientado a objetos de Python y Java, ese es mi descargo de responsabilidad.
Hay dos fragmentos de código a continuación, implementaciones alternativas, una en JavaScript, una en Coffeescript. Estoy intentando ejecutarlos en el servidor en una aplicación Meteor.js. El problema que estoy experimentando es cuando llamo a la función "setInterval" usando el método enlazado "this.printSomething" como mi devolución de llamada, una vez que se ejecuta la devolución de llamada, pierde el alcance y la instancia resulta en que "this.bar" no está definido. ¿Puede alguien explicarme por qué el código JavaScript o el código de coffescript no funciona?
Implementación de 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();
Implementación de Coffeescriptclass foo
constructor: (bar) ->
@bar = bar
start: () ->
Meteor.setInterval(@printSomething, 3000)
printSomething: () ->
console.log @bar
x = new foo 0
x.start()