2013-05-22 54 views
0

我決定使用CoffeeScript,並且我一直試圖將我的Node.js模塊轉換爲CoffeeScript。所以,這裏是JS代碼:在構造函數中循環時的綁定值CoffeeScript

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類。我編的「咖啡-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」陣列和返回,但從來沒有綁定到「這」。謝謝

回答

2

你行的CoffeeScript

@key = value 

不等同於JavaScript的你想

this[key] = obj[key]; 

的方式@工作是,它可以簡單地通過任何this取代或this.。因此,@key編譯爲this.key。您應該改用

@[key] = value 

此外,您拼寫錯constructor(爲consructor)。在CoffeeScript中,constructor是一種與常規方法編譯方式不同的特殊方法;如果拼寫錯誤,CoffeeScript假定您想要一個空的。

+0

謝謝。有沒有一個編輯器可以幫助我避免拼寫錯誤?...就像用不同的顏色爲「構造函數」着色,所以我可以捕捉它或其他方式 – latvian

+0

@latvian大多數編輯器都有各種着色插件。如果您找不到適合您喜愛的編輯器的CoffeeScript插件,我會感到驚訝。 –

+0

WebStorm是我使用的編輯器。我將研究CoffeeScript插件。謝謝 – latvian

0
consructor: (obj) -> 

Domain.prototype.consructor 

您錯過了t

I keep saying that

+0

這就是CoffeeScript生成的代碼 –

+0

是的,從一個缺少't'的源文件生成 – Thilo

+0

對嗎:) –