文字列として表される関数式があるとします
"var someFunction = function (foo) { foo.bar = 'hello'; };"
その文字列で foo.bar へのすべての有効な (js 構文に関して) 参照を安全に識別するにはどうすればよいですか?
"catfoo.barbar"
つまり、これらの参照を別のものに置き換えたいようなインスタンスを回避します。
(そして、誰かが確かに尋ねるでしょう...はい、私はevalを使用しています。はい、私のユースケースでは理にかなっています)
私が本当に探している最も重要なことは、有効なオブジェクト名を一致させる方法です。オブジェクト名のすべての有効な文字のセットを一致させるにはどうすればよいですか? 彼らは何ですか?áéíóú のような文字は明らかに有効な文字であるため、より複雑です。[0-9a-zA-Z_]
私が実際にやりたいことを説明するために。オブジェクトにプロパティを注入する関数があります
function shader(src, dst, out) {
out.a = (src.a + dst.a)/2;
}
これは、2D キャンバス上の各ピクセルに対して呼び出されます。私がやりたいのは、この関数をインライン化し、賢明な方法ですべてのドット演算子を削除することです。
...
var src = {}, dst = {}, out = {};
...
for (i = 0; i < len; i += 4) {
shader(src, dst, out);
}
シェーダーをインライン化すると、
...
var src = {}, dst = {}, out = {};
...
for (i = 0; i < len; i += 4) {
out.a = (src.a + dst.a)/2;
}
しかし、ドット演算子も削除したいと思います。パフォーマンスの向上がどうなるかは本当にわかりません。それは役に立たないマイクロ最適化かもしれません。関数をインライン化すると、少なくとも FF のパフォーマンスが 100% 向上します。とにかくそれをどうするかについて興味がありました。元の関数は、フォールバックと定義の容易さのために存在します。