我有一个存储在字符串中的函数源,例如:
var source="(function(){return Math.sin(x);})";
Run Code Online (Sandbox Code Playgroud)
我想把它传递给eval()后来计算它的值:
var f=eval(source);
var v=f();
Run Code Online (Sandbox Code Playgroud)
它运作良好.但是,我希望能够使用Math无Math.前缀的函数.所以我能做到:
var source="(function(){return sin(x);})";
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来实现这一目标?我已经使用了WebGL,因此它不必与旧版浏览器兼容.
附加信息:
我知道这eval()很糟糕.我正在编写函数grapher,source是由将要绘制的用户输入的函数.这也是为什么要摆脱Math.前缀的原因.
我知道它不会很漂亮,但我不打算编写自己的解析器.也许有更好的方法?
您可以使用古老,缓慢,丑陋的with关键字来扩展范围:
var source="(function(){return sin(x);})";
with (Math) {
var f=eval(source);
var v=f();
}
Run Code Online (Sandbox Code Playgroud)
另见:https://developer.mozilla.org/en/JavaScript/Reference/Statements/with
| 归档时间: |
|
| 查看次数: |
2584 次 |
| 最近记录: |