如何在评估语句中使用'this'?

  • 本文关键字:this 评估 语句 javascript
  • 更新时间 :
  • 英文 :

function SomeFunc()
{
this.var1 = 123;
this.evalStr = "console.log('myvar:' + this.var1)";
}
var sf = new SomeFunc();
eval(sf.evalStr); // returns "myvar: undefined"

我想 eval 考虑我的实例化对象上的变量,我该怎么做?

编辑:你标记为重复的问题比我问的要复杂得多。我在这里谈论的是逃避字符串。

编辑:嘿,我的问题不应该仅仅因为我敢说"eval"而被否决。 嘘。 如果你往下看,你会发现答案非常有用。

这个问题的第一个答案中的evalInContext函数正是你所要求的。只需用sf.evalStrsf来调用它:

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

也许你需要这样的东西:

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可以处理该用例。

最新更新