在 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'"
我想用 myBoolean
、myNumber
、myObject
评估字符串 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"
}
});
请注意,with
和 eval
(或 Function
)以其糟糕的表现而闻名,但这似乎正是您在这里需要的。
我有一个这样的对象:
var context = {
"myBoolean" : true,
"myNumber" : 5,
"myObject" : {
"attr1" : "value1"
}
}
我有一个字符串,它是一个条件:
var condition = "myBoolean == true && myNumber > 3 && myObject.attr1 == 'value1'"
我想用 myBoolean
、myNumber
、myObject
评估字符串 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"
}
});
请注意,with
和 eval
(或 Function
)以其糟糕的表现而闻名,但这似乎正是您在这里需要的。