我有以下代码:
class Number
number = null
constructor: (num) ->
number = num
getNumber: -> number
class Sequence
numbers = []
constructor: ->
addNumber: (n) ->
numbers.push new Number n
displaySequence: ->
for number in numbers
alert number.getNumber()
seq = new Sequence()
seq.addNumber 1
seq.addNumber 2
seq.displaySequence()
seq
的numbers
数组应该包含 2 个 Number
对象,其值为 1 和 2,但我得到的结果是 2 和2...有人可以告诉我一些事情吗?
最佳答案
问题是您的数字类会编译为以下 JavaScript。变量 number 存储在作用域中而不是 Number 函数的成员:
Number = (function() {
// number is stored in the scope not as a member of the prototype
var number;
number = null;
// this is the function that will be return
// so when ever you call it you override number
function Number(num) {
number = num;
}
Number.prototype.getNumber = function() {
return number;
};
return Number;
})();
您必须使用 @
将要存储的数字设为类的属性:
class Number
constructor: (@num) ->
getNumber: -> @num
编译为:
var Number;
Number = (function() {
function Number(num) {
//now num is stored in the returned function not in the scope of the parent function
this.num = num;
}
Number.prototype.getNumber = function() {
return this.num;
};
return Number;
})();
关于javascript - CoffeeScript 将对象添加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12236718/