function SomeFunc()
{
this.var1 = 123;
this.evalStr = "console.log('myvar:' + this.var1)";
}
var sf = new SomeFunc();
eval(sf.evalStr); // returns "myvar: undefined"
我喜欢eval考虑我实例化对象的变量,我该怎么做?
编辑:您标记为重复的问题比我提出的要复杂得多。我在这里谈论评估一个字符串。
编辑:嘿,我的问题不应该因为我敢说" eval"而被投票。啧。如果你向下看,你会发现答案非常有用。
答案 0 :(得分:2)
this question第一个答案中的evalInContext
功能完全符合您的要求。只需使用sf.evalStr
和sf
:
function SomeFunc() {
this.var1 = 123;
this.evalStr = "console.log('myvar:' + this.var1)";
}
var sf = new SomeFunc();
function evalInContext(js, context) {
return function() {
return eval(js);
}.call(context);
}
evalInContext(sf.evalStr, sf); // logs myvar:123

然而,使用构造函数会好得多。他们并不像eval()
那样可怕:
function SomeFunc() {
this.var1 = 123;
this.evalStr = "console.log('myvar:' + this.var1)";
}
var sf = new SomeFunc();
new Function(sf.evalStr).call(sf); // logs myvar:123

答案 1 :(得分:1)
也许你需要这样的东西:
function SomeFunc()
{
this.var1 = 123;
this.evalStr = "console.log('myvar:' + this.var1)";
this.eval = function(){return eval(this.evalStr)};
}
var sf = new SomeFunc();
sf.eval(); // returns "myvar: 123"
将上下文保留在构造函数中,其中this
表示您认为的含义。
如果您想将其保持在外部,则必须使用Function
在动态代码中赋予this
含义。在较旧版本的firefox中,eval
的第二个参数将提供上下文,但该功能已被弃用和删除,可能是因为Function
可以处理该用例。