私はオブジェクトと、それが動作しなければならないフィールドを知るための投影をとる関数をコーディングしています。o [str] vs(o => o.str)
const o = {
a: 'Hello There'
};
function foo(o, str) {
const a = o[str];
/* ... */
}
foo(o, 'a');
や機能を持つ:
function bar(o, proj) {
const a = proj(o);
/* ... */
}
bar(o, o => o.a);
私はV8が私のjavascriptのオブジェクトとクラスを作成していると思う私は、このような文字列を使用する必要がある場合
私は思ったんだけど。フィールドを動的にアクセスするために文字列を使用すると、ハッシュテーブルなどのオブジェクトではなく、クラスを作成できますか?
投影がループの内側にあるので、コールサイトでプロパティアクセスを行う明白な解決策がもう適用されません:-) – Bergi
実際、私の場合、私はフィールドを知ることができません関数を呼び出す前に使用されます。 私がよく理解すれば、隠されたクラスが常に作成されます。しかし、V8はmyobject [variableStr]で何をしますか? – Greg
プロパティの検索が実行されます。もちろん、キャッシュ可能なロードほど高速ではありませんが、代替機能が大きなセットの関数の1つを呼び出す場合は、それほど高速ではありません。どちらが速くなるか、またはその違いが重要かどうかを予測することは難しい。 (確かに、私が書いたように、現実は、問題の単純化されたスニペットより複雑になると思う。) – jmrk