0

我决定使用 CoffeeScript,并且一直在尝试将我的 Node.js 模块转换为 CoffeeScript。所以,这是JS中的代码:

function Domain(obj){
    var self = this;
    for (var key in obj){
        this[key] = obj[key]; //merge values
    }
}

Domain.prototype.save = function(fn){

}

我尝试在 CoffeeScript 中具有相同的内容,如下所示:

class Domain
  consructor: (obj) ->
    for own key, value of obj
      @key = value

  save: (fn) ->

module.exports  = Domain

以下测试失败:

require('coffee-script');
var should = require('should')
    , Domain = require('../index');

should.exist(Domain);

var domain = new Domain({'attOne':1, 'attTwo':2});

domain.should.have.property('save');
domain.should.have.property('attOne');
domain.should.have.property('attTwo');

domain.save.should.be.an.instanceof(Function);

console.log('All tests passed');

属性“attrOne”和“attrTwo”未绑定到 Domain 类。我已经通过'coffee -c index.coffee'编译了咖啡代码来查看js代码:

(function() {
  var Domain,
    __hasProp = {}.hasOwnProperty;

  Domain = (function() {
    function Domain() {}

    Domain.prototype.consructor = function(obj) {
      var key, value, _results;

      _results = [];
      for (key in obj) {
        if (!__hasProp.call(obj, key)) continue;
        value = obj[key];
        _results.push(this.key = value);
      }
      return _results;
    };

    Domain.prototype.save = function(fn) {};

    return Domain;

  })();

  module.exports = Domain;

}).call(this);

从编译的 js 中,我看到生成并返回了“_result”数组,但从未绑定到“this”。我如何将数组绑定到类范围以通过测试?谢谢

4

2 回答 2

2

你的 CoffeeScript 行

@key = value

不等于你想要的 javascript

this[key] = obj[key];

工作方式@是它被简单地替换为thisor this.。因此,@key编译为this.key. 你应该改用

@[key] = value

此外,您拼写constructor错误(as consructor)。在 CoffeeScript 中,constructor是一种特殊方法,其编译方式与普通方法不同;如果拼写错误,CoffeeScript 会假定您需要一个空的。

于 2013-05-22T04:47:47.940 回答
0
consructor: (obj) ->

Domain.prototype.consructor 

您缺少一个t.

我一直这么说

于 2013-05-22T01:49:29.503 回答