更新 函数/类的代码存储在一个字符串中,这就是我不能直接调用它的原因。我们的想法是对对象进行内省并枚举它的数据成员,当它是一个函数时它可以工作,但是当下面的变量被评估时它不起作用。
我正在尝试在javascript中评估一个对象。这样的事情。
var myObj {
greet: "Greeting",
myPrint: function() {
alert("hello");
}
};
这个想法是能够在eval中运行它并以某种方式获取变量名(myObj)或创建一个对象。我已经尝试了使用eval的各种方法,但无法弄清楚这一点。当我有这样的事情时,这就有效。
function myObj() {
this.greet = "Greeting";
this.myPrint = function() {
alert("hello");
}
};
运行eval(“(”+ code +“)”);其中code是包含上述函数的字符串,返回myObj()给我。
更新2 所以基本上我想评估这样的事情。 eval(“var x = 5”);而我正试图获得x。由于它是一个被评估的字符串,即使它被添加到窗口命名空间,也无法解析它与解析字符串之间的区别。现在这只是一个简单的例子,但正如我所说,第一段代码有点困难。就像我说的... eval(“function test(){return'hello';}”); return test()类似于我期望的“var x = 5”语句。
对于我遗漏的第一个案例,有没有办法做到这一点? 感谢
答案 0 :(得分:0)
您在不执行myPrint
功能的情况下评估对象。
您需要执行类似
的操作 myObj.myPrint()
让它发出警报。
[edit]要立即运行myPrint
函数,请将代码更改为:
var myObj = {
greet: "Greeting",
myPrint: (function() {
alert("hello");
})();
};
答案 1 :(得分:0)
您是否尝试动态调用回调?
var myObj = { // fixed this line of code as it was missing the =
greet: "Greeting", // replaced ; with ,
myPrint: function() {
alert("hello");
}
};
console.log(eval(myObj)); // returns obj as expected.
如果我的假设是正确的,你需要使用括号表示法,不需要EVAL
所以如果你传递一个String,它看起来像是:
var str = 'myPrint';
var strTwo = 'greet'
myObj[str](); // to execute the function
myObj[strTwo]; // now contains "Greeting"
哪个会执行该功能。
希望有所帮助!
添
编辑:
var myObj = 'var myObj = { greet: "Greeting", myPrint: function() { alert("hello"); } }'
console.log(eval(myObj));
myObj.myPrint();
如果这不起作用,那么这就是你想要的,这意味着你没有正确地转义你的字符串:
答案 2 :(得分:0)
代码:
var sCode = '{ great: "Greating", myPrint: function() { alert("hello!"); } }',
oObj = eval("(" + sCode + ")");
oObj.myPrint(); // alert "hello"
console.log(oObj.great); // prints "Greating"