在Javascript中将对象转换为上下文

时间:2015-04-04 11:27:59

标签: javascript scope

我有一个像这样的对象:

var context = {
  "myBoolean" : true,
  "myNumber" : 5,
  "myObject" : {
    "attr1" : "value1"
  }
}

我有一个字符串,这是一个条件:

var condition = "myBoolean == true && myNumber > 3 && myObject.attr1 == 'value1'"

我希望使用conditionmyBooleanmyNumber来评估字符串myObject,并将其值放在上下文中。

我接近这句话的答案:

eval("function doTest() { return " + condition + ";};"
    + "var answer = doTest.apply(context);");

但我需要在变量名前面添加this.。所以它并不完全是我想做的事。

我知道做这样的事情听起来不是很好/安全,但我觉得答案很有趣。

1 个答案:

答案 0 :(得分:1)

with statement正是如此,将一个对象追加到您的范围:

var condition = "myBoolean == true && myNumber > 3 && myObject.attr1 == 'value1'"
var doTest = new Function("context", "with(context){ return "+condition+"; }");
var answer = doTest({
  "myBoolean" : true,
  "myNumber" : 5,
  "myObject" : {
    "attr1" : "value1"
  }
});

请注意,witheval(或Function)因其糟糕的表现而闻名,但似乎这正是您所需要的。