私は毎秒何千回も呼び出されるかもしれない関数を持つライブラリを作成しています。そのような固定プロトタイプに新しいデータセットを結合するように、この関数はnew
コンストラクタが必要です。'バインディング' Javascriptの関数に 'new'コンストラクタを追加
var internalFunc = function(a) {
this.foo = a;
};
internalFunc.prototype = {
something: 'some value',
anotherIndex: 'another value',
/* ... */
};
だから、私は現在internalFunc
がnew
コンストラクタと呼ばれるようになっています方法は、第二を使用することです誰かが 'コンストラクタプロキシ'と呼べるもののような機能の並べ替え。
var funcThatGetsUsed = function(someArgument){
return new internalFunc(someArgument);
};
しかし、バックの主な問題になって、このfuncThatGetsUsed
は何千回も二と呼ばれる得ることができます。したがって、ライブラリのサイズを減らすことができます。そして、私がその中間者の 'コンストラクタプロキシ'関数を削除して新しいコンストラクタをinternalFunc
にバインドすることができれば、コードの速度を向上させることができますそのようなbind
機能に:だから
var funcThatGetsUsed = internalFunc.bindToConstructor('new');
、関数呼び出しのオーバーヘッドを減らすためにJavaScriptで「bindToConstructor
」する方法はありますか?
なぜ私はライブラリのユーザにこの新しい演算子を使用するように伝えることができないのは、この特定のライブラリの目的を無効にするためです。ケースとポイント:JQueryは「コンストラクタプロキシ」機能を使用します。ただ、console.log($.toString())
のようなものに入力して、あなたはこのようなものが表示されます。
> console.log("'" + $.tostring() + "'")
'function (a,b){return new n.fn.init(a,b)}'
は、ソリューションがInternet Explorerで動作する必要はありませんので、私は、上記のエッジをターゲットにしていますのでご注意ください。 「ターゲットエッジ」とは、Edgeで動作する場合、他のすべてのブラウザで動作することです。
を使用することができ、あなたは、オブジェクト毎秒数千人をインスタンス化を心配する必要があります。 – Bergi
あなたが探していることを行うだろう 'internalFunc :: new'のための[オペレータ提案の考え方](https://github.com/tc39/proposal-bind-operator/issues/25)がありました。しかし、No. – Bergi
@Bergi **の**全体の質問をお読みください。私は現在何をしているのですが、より効率的な方法があれば私は好奇心が強いです。また、これは私が書いている図書館のためのものです。図書館の作家としての私の目標は、それを1秒間に数千回呼び出すことによってそれを悪用する人々のためにできるだけ効率的に図書館を作ることです。 –