2360760
下面的 CoffeeScript 代码:
class Counter
constructor: ([@callback](/user/callback)) ->
console.log [@record](/user/record)
[@record](/user/record): 0
set: ->
[@record](/user/record) += 1
console.log [@record](/user/record)
done: ->
[@record](/user/record) -= 1
console.log [@record](/user/record)
[@callback](/user/callback)() if [@record](/user/record) is 0
demo = new Counter -> console.log "finished"
demo.set()
demo.done()
编译到 JS 是这样的:
var Counter, demo;
Counter = (function() {
function Counter(callback) {
this.callback = callback;
console.log(this.record);
}
Counter.record = 0;
Counter.prototype.set = function() {
this.record += 1;
return console.log(this.record);
};
Counter.prototype.done = function() {
this.record -= 1;
console.log(this.record);
if (this.record === 0) {
return this.callback();
}
};
return Counter;
})();
demo = new Counter(function() {
return console.log("finished");
});
demo.set();
demo.done();
问题在 [@record](/user/record), 本来写在 constructor 里边的话, 执行是对的
不过结果 record 不是在 Counter.prototype.record, 而是 Counter.record, 运行不正常了,
觉得好意外, 这是怎么回事?