我怎样才能使用这个'在评估声明中?

时间:2017-03-03 03:26:53

标签: 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"而被投票。啧。如果你向下看,你会发现答案非常有用。

2 个答案:

答案 0 :(得分:2)

this question第一个答案中的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




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