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

Transform an object into a context in Javascript

我有一个这样的对象:

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

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

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

我想用 myBooleanmyNumbermyObject 评估字符串 condition,将它们的值放在上下文中。

我已经接近这些行的答案了:

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

但是我需要在我的变量名前面加上this.。所以这不是我想要做的。

我知道做这样的事情听起来不太nice/secure,但我认为答案很有趣。

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)以其糟糕的表现而闻名,但这似乎正是您在这里需要的。