Javascript - 在上下文/范围中进行评估,无需使用此关键字而不使用 with 语句

标签 javascript scope eval with-statement

这篇文章提供了如何在特定上下文/范围内使用 eval 的解决方案,而无需在 eval 代码中的所有变量/函数前面加上 thisjavascript 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 语句,是否有替代解决方案?

最佳答案

is there an alternative solution?

当然,但这比 with 更糟糕:

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

关于Javascript - 在上下文/范围中进行评估,无需使用此关键字而不使用 with 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51698396/

相关文章:

javascript - 当 `this`没有引用对象时如何调用对象方法?

javascript - 为什么 eval 不能访问 with 语句下的作用域变量?

javascript - 在 KnockoutJS 中向列表项添加 onclick 事件。

javascript - 用逗号替换空格和空格,用JS中的连字符?

javascript - 类似于 c++ 中用于 javascript 的基于堆栈的对象

bash - 如何在 bash 中组合超时和 eval 命令

javascript - 在 Angular 中使用 'eval' 捕获未定义的 TypeError?

javascript - 根据数据值对 S、M、L 等服装尺码进行排序

javascript - 鼠标移动使div平滑倒转

c# - 关于 C# 局部变量作用域的问题