【发布时间】:2012-03-28 14:17:02
【问题描述】:
更新 函数/类的代码存储在一个字符串中,这就是我不能直接调用它的原因。这个想法是对对象进行自省并枚举其数据成员,当它是一个函数时,它可以工作,但当像下面这样的变量被评估时,它就不起作用了。
我正在尝试在 javascript 中评估一个对象。像这样。
var myObj {
greet: "Greeting",
myPrint: function() {
alert("hello");
}
};
我们的想法是能够在 eval 中运行它并以某种方式获取变量名 (myObj) 或创建的对象。我已经使用 eval 尝试了各种方法,但无法弄清楚这一点。当我有这样的东西时,这很有效。
function myObj() {
this.greet = "Greeting";
this.myPrint = function() {
alert("hello");
}
};
运行 eval("(" + code + ")");其中代码是包含上述函数的字符串,将 myObj() 返回给我。
更新 2 所以基本上我想评估这样的事情。 eval("var x = 5");我想得到x。由于它是一个正在评估的字符串,即使它被添加到窗口命名空间,除了解析字符串之外,没有办法对其进行解密。现在这只是一个简单的例子,但正如我所说,第一段代码有点困难。就像我说的... eval("function test() { return 'hello'; }"); return test() 这类似于我对“var x = 5”语句的期望。
对于我失踪的第一种情况,是否有类似的方法? 谢谢
【问题讨论】:
-
我不太确定你想做什么,但更紧迫的问题是为什么你想这样做?你想解决什么问题?
-
基本上我想反省一个类/函数的所有数据成员。但是,代码实际上是任意的,并且被粘贴到我必须自省的文本框中。 (可以将其视为可以显示所有数据成员的 IDE 的一种功能)。我知道在 eval 上运行任意代码很危险,但这是出于完全不同的目的。
-
您的
myObj代码不是有效的 JavaScript。可以假设这是一个错字,还是您需要以某种方式评估的实际内容? -
对不起,克里斯,这是一个错字。
标签: javascript