毎秒何千回も呼び出される可能性のある関数を含むライブラリを作成しています。この関数には、次の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 で機能する場合、もちろん他のすべてのブラウザーでも機能するということです。