问题
大家好,我对 JavaScript 相当陌生,我来自 Python 和 Java 非常面向对象的世界,这是我的免责声明。
下面有两块代码,替代实现,一个在 JavaScript 中,一个在 Coffeescript 中。我正在尝试在 Meteor.js 应用程序的服务器上运行它们。我遇到的问题是当使用绑定方法“this.printSomething”作为我的回调调用函数“setInterval”时,一旦执行该回调,它就会失去实例的范围,导致“this.bar”未定义!谁能向我解释为什么 JavaScript 或 coffescript 代码不起作用?
JavaScript 实现
function 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();
Coffeescript 实现
class foo
constructor: (bar) ->
@bar = bar
start: () ->
Meteor.setInterval(@printSomething, 3000)
printSomething: () ->
console.log @bar
x = new foo 0
x.start()