2011-12-27 76 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