[英]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.