2

毎秒何千回も呼び出される可能性のある関数を含むライブラリを作成しています。この関数には、次のnewように新しいデータ セットを固定プロトタイプにバインドするためのコンストラクターが必要です。

var internalFunc = function(a) {
   this.foo = a;
};
internalFunc.prototype = {
   something: 'some value',
   anotherIndex: 'another value',
   /* ... */
};

したがって、現在コンストラクターinternalFuncで呼び出されるようになっている方法newは、「コンストラクタープロキシ」と呼ばれるもののような2番目の関数を使用することです。

var funcThatGetsUsed = function( someArgument ){
     return new internalFunc( someArgument );
};

ただし、主な問題に戻ると、これfuncThatGetsUsedは 1 秒間に何千回も呼び出される可能性があります。したがって、ライブラリのサイズが縮小される可能性があり、その仲介者の「コンストラクタープロキシ」機能を排除し、新しいコンストラクターを にバインドすることができれば、コードの速度が向上する可能性がありますinternalFunc。次のbindような関数:

var funcThatGetsUsed = internalFunc.bindToConstructor('new');

bindToConstructorでは、関数呼び出しのオーバーヘッドを削減するために JavaScript で' ' を使用する方法はありますか?

ライブラリのユーザーに new 演算子を使用するように伝えることができない理由は、この特定のライブラリの目的が無効になるためです。ケースとポイント: JQuery は「コンストラクター プロキシ」関数を使用します。のように入力するだけで、次のようconsole.log($.toString())に表示されます。

> console.log("'" + $.tostring() + "'")

'function (a,b){return new n.fn.init(a,b)}'

Edge 以降を対象としているため、このソリューションは Internet Explorer で動作する必要はありません。「Edge をターゲットにする」とは、Edge で機能する場合、もちろん他のすべてのブラウザーでも機能するということです。

4

1 に答える 1