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

Create a class in Javascript that can access local variables

本文关键字:访问 局部变量 一个 Javascript 创建      更新时间:2023-09-26

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

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

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

第二个警报仍然将 b 显示为 10,即使我在 TestC 函数中将本地范围内的 b 设置为 20。最后一个警报根本不起作用 eval() 在控制台中返回"未捕获的引用错误: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)");