Coffeescript函数声明func: - >或func = - >?

sou*_*ver 1 coffeescript

我正在阅读spine.js文档,我想知道一些关于函数声明的内容.在我总是阅读的文档中

constructor: ->
  super
  ....
Run Code Online (Sandbox Code Playgroud)

但除此之外我总是读

constructor = ->
  super
  ....
Run Code Online (Sandbox Code Playgroud)

那么:和=等于函数声明?

Ale*_*yne 9

没有.

在定义一个类时,其:工作方式与其他地方的工作方式略有不同.在类定义中,:将此函数作为方法放在原型(实例方法)上的方法. constructor:是一个用于构造函数的特例.

如果你看一下编译好的javascript,差别很明显.

class Foo
  constructor: -> @foo = 'foo'
  method: ->
Run Code Online (Sandbox Code Playgroud)

汇编到这(好!)

var Foo;
Foo = (function() {
  function Foo() {
    this.foo = 'foo';
  }
  Foo.prototype.method = function() {};
  return Foo;
})();
Run Code Online (Sandbox Code Playgroud)

您可以看到构造函数是构造函数,方法在原型上.

但是,当您使用时=,只需分配局部变量,并且函数实际上不是构造函数或原型的类的一部分:

class Bar
  constructor = -> @bar = 'bar'
  method = ->
Run Code Online (Sandbox Code Playgroud)

编译到这个(不好!)

var Bar;
Bar = (function() {
  var constructor, method;
  function Bar() {}
  constructor = function() {
    return this.bar = 'bar';
  };
  method = function() {};
  return Bar;
})();
Run Code Online (Sandbox Code Playgroud)

通过简单地查看编译结果,可以发现或解决许多关于咖啡脚本语法的问题.这也是为什么我不建议在不知道JavaScript的情况下学习咖啡脚本的原因,因为如果你不知道它编写的内容,它所做的一些事情真的没有意义.