繁体   English   中英

用Javascript创建一个可以访问局部变量的类

[英]Create a class in Javascript that can access local variables

我正在开发一个将代码注入到现有代码中的调试器。 然后使用eval()记录并运行它。

但是,eval()似乎仅在其现有范围内起作用。 为了克服这个问题,我尝试添加一个在每个本地范围内重新创建的类。 但它不起作用。

我添加了代码来说明我的问题。 第一个警报按预期工作,我假设这是因为MyClass是在同一范围内创建的。

即使我在TestC函数中将本地范围内的b设置为20,第二个警报仍将b显示为10。 而且最后一个警报根本不起作用,控制台中的eval()返回“未捕获的ReferenceError:未定义c”。

如果我在每个函数中添加整个MyClass并对其进行分配,则它可以工作,但是那感觉并不好。 并且可以向项目添加1000行代码。

http://jsfiddle.net/ekim/zryj3taq/2/

var MyClass = function()
{
    this.MyAlert = function(codex)
    {
        eval(codex);
    }
}

var b = 10;
var MyOne = new MyClass();
MyOne.MyAlert("alert(b);");

function TestC()
{
    var b = 20;
    var MyOne2 = new MyClass();
    MyOne2.MyAlert("alert(b);");

    var c = 20;
    var MyOne2 = new MyClass();
    MyOne2.MyAlert("alert(c);");
}


TestC();

您可以使用new Function(\\[arg1\\[, arg2\\[, ...argN\\]\\],\\] functionBody)

 (function(){ var str = "return (A+B)*C"; var myFunc = new Function("A","B","C", str); var result = myFunc(2,3,4); console.log(result); }()); /* Example with function */ (function(){ var fncDouble = function (X) { return X*2; } var str = "return F(A)+B"; var myFunc = new Function("F","A","B", str); var result = myFunc(fncDouble,3,1); console.log(result); }()); 

据我所知,没有简单的解决方案,因为eval()函数只是创建一个新的单独的编译器。

试试这个: MyOne2.MyAlert.call(this, "alert(b)");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM