我正在阅读spine.js文档,我想知道一点关于函数声明的事情。在文档中我总是读到
constructor: ->
super
....但除此之外,我总是看书
constructor = ->
super
....那么:和=对于函数声明是相等的吗?
发布于 2011-12-28 05:47:19
不是的。
在定义类时,:的工作方式与其他地方略有不同。在类定义中,:意味着将此函数作为方法放在原型上(实例方法)。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 = ->编译成这样(Bad!)
var Bar;
Bar = (function() {
var constructor, method;
function Bar() {}
constructor = function() {
return this.bar = 'bar';
};
method = function() {};
return Bar;
})();只需查看编译结果,就可以发现或解决许多有关咖啡脚本语法的问题。这也是为什么我不建议在不了解JavaScript的情况下学习咖啡脚本的原因,因为如果你不知道它编译成什么,那么它所做的一些事情就没有真正的意义。
https://stackoverflow.com/questions/8649588
复制相似问题