簡體   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