問題
こんにちは、私は JavaScript の初心者であり、Python と Java の非常にオブジェクト指向の世界から来ました。これは私の免責事項です。
以下に 2 つのコードのチャンクがあります。1 つは JavaScript で、もう 1 つは 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()