我正在阅读spine.js文档,我想知道一些关于函数声明的内容。 在文档中我总是阅读
constructor: ->
super
....
但我总是读
constructor = ->
super
....
那么:和=等于函数声明吗?
答案 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的情况下学习咖啡脚本的原因,因为如果你不知道它编写的是什么,它所做的一些事情就没有意义。