2011-12-27 77 views
1

我正在閱讀spine.js文檔,我想知道一些關於函數聲明。 在DOC我總是讀Coffeescript函數聲明func: - >或func = - >?

constructor: -> 
    super 
    .... 

但除此之外,我經常閱讀

constructor = -> 
    super 
    .... 

所以是:和=相等函數聲明?

+3

編譯後的javascript看起來像什麼? – asawyer 2011-12-27 21:44:41

回答

9

當定義一個類號的:作品略有不同比它在其他地方。在類定義中,:意味着將此函數作爲原型的一種方法(實例方法)。 constructor:是用於構造函數的特例。

如果你看看編譯好的javascript,那麼區別很明顯。

class Foo 
    constructor: -> @foo = 'foo' 
    method: -> 

編譯這個(好!)

var Foo; 
Foo = (function() { 
    function Foo() { 
    this.foo = 'foo'; 
    } 
    Foo.prototype.method = function() {}; 
    return Foo; 
})(); 

你可以看到構造函數的構造函數和方法是在原型。

但是,當您使用=你只需將本地變量和函數並不是真正的類的構造函數或原型的一部分:(BAD!)

class Bar 
    constructor = -> @bar = 'bar' 
    method = -> 

編譯這個

var Bar; 
Bar = (function() { 
    var constructor, method; 
    function Bar() {} 
    constructor = function() { 
    return this.bar = 'bar'; 
    }; 
    method = function() {}; 
    return Bar; 
})(); 

有關咖啡腳本語法的許多問題可以通過查看編譯結果來發現或解決。這也是爲什麼我不建議在沒有了解JavaScript的情況下學習咖啡腳本,因爲如果你不知道它編譯成什麼,它所做的一些事情沒有意義。

+0

非常感謝您的回答:) – soupdiver 2011-12-27 23:53:29

+1

+1對於「許多關於咖啡腳本語法的問題可以通過查看編譯結果來發現或解決。」如果您遇到任何類型的錯誤,請查看編譯結果。特別是對於像「意外縮進」這樣的語法錯誤,通過「嘗試」頁面打開瀏覽器窗口非常有用,您可以在其中粘貼片段並獲得即時反饋。 – Thilo 2011-12-28 01:39:11

+0

+1,我喜歡http://js2coffee.org/咖啡js面板來做到這一點 – Guillaume86 2011-12-28 15:01:15

相關問題