Coffeescript 为什么spine.js Module.init是这样实现的?

Coffeescript 为什么spine.js Module.init是这样实现的?,coffeescript,spine.js,Coffeescript,Spine.js,根据定义: 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...) 要么有人不知道splats,要么他们觉得这样做更干净,要么他们认为不使用一堆额外的逻辑来处理arguments对象会更高效。

根据定义:

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...)

要么有人不知道splats,要么他们觉得这样做更干净,要么他们认为不使用一堆额外的逻辑来处理arguments对象会更高效。

要么有人不知道splats,要么他们觉得这样做更干净,或者他们认为不使用一堆额外的逻辑来处理arguments对象会更有效。

可能是因为编译的JS要小得多(Spine.JS非常强调低占用空间)

汇编至:

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(){});
};
var\uuu slice=[].slice;
Module.init=Controller.init=Model.init=function(){
var-args;

args=1可能是因为编译的JS要小得多(Spine.JS非常强调低占用空间)

汇编至:

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(){});
};
var\uuu slice=[].slice;
Module.init=Controller.init=Model.init=function(){
var-args;

args=1我理解,但这限制了你实际可以做的事情,如果你想在属性上循环,你会得到一些未定义的属性,我不确定你是否可以向init函数传递5个以上的属性。我理解,但这限制了你实际可以做的事情,如果你想在属性上循环,你会得到一些und定义了,我不确定是否可以向init函数传递5个以上的属性。当然,但这是一个限制。并且限制不是很酷,特别是在一个库/框架中实现的,你应该根据自己的需要对其进行子类化和修改。@aschmid00是的,这是真的。但这确实是我的猜测;可能还有另一个原因。我d问Spine的创建者Alex MacCaw可能是一个好主意,而不是问他自己=Pi从作者那里得到了答案:@aschmid00 Cool!我喜欢他在下一个版本中去掉这个函数,虽然=Psure,但这是一个限制。限制不是很酷,特别是在一个库/框架中实现的,你应该对你的ne进行子类化和修改eds.@aschmid00是的,这是真的。但这纯粹是我的猜测;可能还有另一个原因。我可能最好问问Spine的创建者Alex MacCaw,而不是他自己=Pi从作者那里得到了答案:@aschmid00酷!我喜欢他在下一个版本中去掉这个函数,尽管=P