如此处定义:
Module.init 的实现如下:
Module.init = Controller.init = Model.init = (a1, a2, a3, a4, a5) ->
new this(a1, a2, a3, a4, a5)
为什么会这样?为什么定义5个属性而不使用attrs...
所以属性不固定为5个......
new this(attrs...)
如此处定义:
Module.init 的实现如下:
Module.init = Controller.init = Model.init = (a1, a2, a3, a4, a5) ->
new this(a1, a2, a3, a4, a5)
为什么会这样?为什么定义5个属性而不使用attrs...
所以属性不固定为5个......
new this(attrs...)
可能是因为编译后的 JS 要小得多(Spine.js 非常强调低占用空间)。
Module.init = Controller.init = Model.init = (a1, a2, a3, a4, a5) ->
new this(a1, a2, a3, a4, a5)
编译为:
Module.init = Controller.init = Model.init = function(a1, a2, a3, a4, a5) {
return new this(a1, a2, a3, a4, a5);
};
尽管:
Module.init = Controller.init = Model.init = (args...) ->
new this args...
编译成更复杂的:
var __slice = [].slice;
Module.init = Controller.init = Model.init = function() {
var args;
args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
return (function(func, args, ctor) {
ctor.prototype = func.prototype;
var child = new ctor, result = func.apply(child, args), t = typeof result;
return t == "object" || t == "function" ? result || child : child;
})(this, args, function(){});
};
这是因为在 JavaScript 中,new
运算符和apply
不能一起使用 :(
要么有人不知道 splats,要么他们觉得这样做更干净,或者他们认为不使用一堆额外的逻辑来处理 arguments 对象会更高效。