3

ソースを読んで Mootools を学ぼうとしていますが、関数のローカル コピーを作成する理由がわかりません。

var Function = this.Function;

しかし、配列、数値、および文字列のローカル コピーを作成して同じことを行わないのはなぜですか。

Function.from = function(item){
    return (typeOf(item) == 'function') ? item : function(){
        return item;
    };
};

Array.from = function(item){
    if (item == null) return [];
    return (Type.isEnumerable(item) && typeof item != 'string') ? (typeOf(item) == 'array') ? item : slice.call(item) : [item];
};

Number.from = function(item){
    var number = parseFloat(item);
    return isFinite(number) ? number : null;
};

String.from = function(item){
    return item + '';
};

また、149行目で関数がローカルプロトタイププロパティに格納されている実装関数を呼び出す方法がわかりませんか?

Function.implement({

hide: function(){
    this.$hidden = true;
    return this;
},

protect: function(){
    this.$protected = true;
    return this;
}

});

Function は関数であるため、その内部 [[prototype]] は Function.prototype ですか?

4

1 に答える 1

2
  • 他のコンストラクターよりも多く参照されていることに気付くでしょう。そのFunctionため、ローカル変数は難読化できるため、圧縮だけでなく、パフォーマンスをわずかに向上させるためにローカル参照を追加した可能性があります。... (別の見方をすると、最初に持っていたよりも多くの他のコンストラクターへの参照が表示されます。)

  • .overloadSetter()また、関数にチェーンされているFunction.prototype.extendと、その関数が余分なコードやダックタイピングなどでラップされていることにも気付くでしょう。したがって、彼らがそれを使用しなかった理由は、おそらく、この余分なコードが明らかに不要であり、内部で使用する必要がなかったからです。

  • プロトタイプを拡張するためimplement、常に望ましいとは限りません。すべてのインスタンスで追加のメソッドを使用できるようにしたくない場合がありますが、Objectコンストラクターに格納されているネイティブ メソッドと同じように、それらを論理名前空間に格納したい場合があります。

于 2012-06-08T21:02:18.757 に答える