在 Javascript 中创建一个可以访问局部变量的类
Create a class in Javascript that can access local variables
我正在开发一个调试器,它将代码注入到现有的代码中。然后使用 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)");
相关文章:
- jQuery.ajax()访问javascript循环中的beforeEnd局部变量
- 创建所有原型函数均可访问的局部变量
- 局部变量仍可通过函数访问
- 使用原型访问局部变量
- 全局访问的 JavaScript 函数局部变量
- 从另一个函数访问局部变量
- 实例化后可从方法访问的 Javascript 局部变量
- 访问在另一个文件中定义的局部变量
- 为什么全局变量无法访问,即使稍后在代码中定义了局部变量
- 访问函数外部的局部变量
- 是否可以从函数外部访问函数的局部变量
- 在 Javascript 中创建一个可以访问局部变量的类
- 从回调函数访问局部变量
- 访问子窗口中的父局部变量
- 访问angularjs控制器中的局部变量
- 是否可以从函数外部访问函数的局部变量
- Javascript:如何在回调函数中访问局部变量
- 在JavaScript中更改函数上下文(用于访问局部变量)
- 如何在 JavaScript 中的函数外部访问局部变量
- 分配给窗口属性的函数是否仍然可以访问局部变量?