eval返回变量名而不是undefined。 (JavaScript的)

时间:2012-03-27 15:35:24

标签: javascript

更新 函数/类的代码存储在一个字符串中,这就是我不能直接调用它的原因。我们的想法是对对象进行内省并枚举它的数据成员,当它是一个函数时它可以工作,但是当下面的变量被评估时它不起作用。

我正在尝试在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”语句。

对于我遗漏的第一个案例,有没有办法做到这一点? 感谢

3 个答案:

答案 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();

如果这不起作用,那么这就是你想要的,这意味着你没有正确地转义你的字符串:

http://jsfiddle.net/XtyHh/

答案 2 :(得分:0)

代码:

var sCode = '{ great: "Greating", myPrint: function() { alert("hello!"); } }',
    oObj = eval("(" + sCode + ")");

oObj.myPrint(); // alert "hello"
console.log(oObj.great); // prints "Greating"