ここで定義されているように:
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
演算子 andapply
を組み合わせて使用できないためです :(
誰かがスプラットについて知らなかったか、この方法で行う方がクリーンだと感じていたか、または引数オブジェクトを処理するために余分なロジックを使用しない方がパフォーマンスが向上すると考えていた可能性があります。