私は例えば、文字列に保存されている関数ソース:evalの中輸入数学の名前空間に()
var source="(function(){return Math.sin(x);})";
を持って、私はeval()
に渡し、それが後の値です計算したい:
var f=eval(source);
var v=f();
それは動作しますよくしかし、の接頭辞なしでMath
の機能を使用したいと考えています。だから私はできるだろう:
var source="(function(){return sin(x);})";
これを達成する簡単な方法はありますか?私はすでにWebGLを使用しているので、古いブラウザと互換性がある必要はありません。
追加情報:私はeval()
が悪いことを承知している
。私は関数グラファーを書いていますが、source
は描画される予定のユーザーによって入力された関数です。それで、Math.
という接頭辞を取り除きたいのです。
私はそれがきれいになるとは思っていませんが、私は自分のパーサを書くつもりはありません。多分もっと良い方法がありますか?
コードを文字列として保存する理由はありますか?関数リテラルを変数に格納するだけで、評価を避けるのはなぜですか?あなたが「数学」をしたくない理由はありますか? –
なぜ 'eval'を使っているのですか? 'var f = Math.sin'を保存して、既存の関数を1つだけラップするだけではならない場合は、無関係な関数を使用してください。あなたは車輪の上に蝶を壊している。そして、それは非常に醜い、危険な、起動するための遅い車輪です。 – delnan
質問:「eval」とタイプしたときに震えましたか?そうでない場合は、別の解決策を見つけることを提案するかもしれません。もしそうなら、先に進んで、危険なものを使用するための*私のテストに合格しました。:) – Crisfole