0

ここで定義されているように:

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

2 に答える 2

2

おそらく、コンパイルされた 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を組み合わせて使用​​できないためです :(

于 2012-05-17T15:28:39.677 に答える
1

誰かがスプラットについて知らなかったか、この方法で行う方がクリーンだと感じていたか、または引数オブジェクトを処理するために余分なロジックを使用しない方がパフォーマンスが向上すると考えていた可能性があります。

于 2012-05-17T15:11:17.530 に答える