无法访问coffeescript中的属性

时间:2011-10-24 00:31:34

标签: javascript coffeescript

我打算得到“0,0,0,0”但只得到“,,,”。看来我在coffeescript中访问类属性的方式运行不正常。

class Tetris
    @array: []

    constructor: (@width, @height) ->
        @array = new Array(@width*@height)
        @array.map (item, i) -> this[i]=0

    to_s: ->
        array_item for array_item in this.array

$ ->
    t = new Tetris 2,2
    alert t.to_s()

编译的javascript如下:

(function() {
  var Tetris;
  Tetris = (function() {
    Tetris.array = [];
    function Tetris(width, height) {
      this.width = width;
      this.height = height;
      this.array = new Array(this.width * this.height);
      this.array.map(function(item, i) {
        return this[i] = 0;
      });
    }
    Tetris.prototype.to_s = function() {
      var array_item, _i, _len, _ref, _results;
      _ref = this.array;
      _results = [];
      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
        array_item = _ref[_i];
        _results.push(array_item);
      }
      return _results;
    };
    return Tetris;
  })();
  $(function() {
    var t;
    t = new Tetris(2, 2);
    return alert(t.to_s());
  });
}).call(this);

1 个答案:

答案 0 :(得分:2)

试试这个

class Tetris
    constructor: (@width, @height) ->
        @array = for x in [ 0 ... (@height*@width)] then 0
        console.log @array
    to_s: ->
        array_item for array_item in this.array

$ ->
    t = new Tetris 2, 2
    alert t.to_s()

或者

class Tetris
    constructor: (@width, @height) ->
        @array = (0 for x in [0...(@height*@width)])
        console.log @array
    to_s: ->
        array_item for array_item in this.array

$ ->
    t = new Tetris 2, 2
    alert t.to_s()

他们都生成相同的javascript

这是涵盖列表理解的部分。 http://jashkenas.github.com/coffee-script/#loops