CoffeeScript将对象添加到数组中

CoffeeScript Adding object to an array

本文关键字:数组 添加 对象 CoffeeScript      更新时间:2023-09-26

我有以下代码:

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()

seqnumbers数组应该包含值为1和2的2个Number对象,但我得到的结果是2和2……有人能告诉我一些信息吗?

问题是您的数字类,它复制到以下JavaScript。变量号存储在范围中而不是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;
})();

使用@声明本地字段。

class Number
 constructor: (@num) ->
 getNumber: -> @num
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()