Javascript-在上下文/范围内评估,不使用带关键字而不使用该语句

时间:2018-08-05 21:29:00

标签: javascript scope eval with-statement

这篇文章为如何在特定的上下文/范围内使用eval提供了一种解决方案,而不必在评估代码中使用this开头所有变量/函数。 javascript eval in context without using this keyword

为了澄清-假设我有以下对象作为eval语句{dog: "labrador"}的上下文。我希望console.log(eval(dog))输出“ labrador”而不必键入eval(this.dog)

但是,链接文章中的解决方案:

function evalInContext(scr, context)
{
    // execute script in private context
    return (new Function( "with(this) { return " + scr + "}")).call(context);
}

使用with语句。考虑到不建议使用with语句,是否有替代解决方案?

1 个答案:

答案 0 :(得分:1)

  

有替代解决方案吗?

当然可以,但是那比with更糟:

 return new Function(...Object.keys(context), scr)(...Object.values(context));