evalを使わずにこのようなものを作ることは可能ですか?
foo1 = {"x": 4};
foo2 = {"x": "someFunc(foo1.x)"};
someFunc(var1)
{
return (var1 + 1);
}
alert(foo1.x); // 4
alert(foo2.x); // 5 (hopefully)
実はこれには2つの問題があります。1 つ目は実行する関数を取得することで、2 つ目は括弧なしで実行することです。これは、ループでは foo2.x か foo2.x() かがわからないためです。
私が考えることができる最善の方法は、JSON オブジェクトで関数を表すキーワードを検索し、スイッチ リストを使用してそれらを実行し、キーワードを値に置き換えることです。
欠点は、何かが変更されるたびに JSON オブジェクトを更新する必要があることです。