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

时间:2011-12-27 21:41:15

标签: coffeescript

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

constructor: ->
  super
  ....

但我总是读

constructor = ->
  super
  ....

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

1 个答案:

答案 0 :(得分:9)

没有

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

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

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

汇编到此(好!)

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

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

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

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的情况下学习咖啡脚本的原因,因为如果你不知道它编写的是什么,它所做的一些事情就没有意义。