Javascript - 将对象属性转换为函数范围内的变量

标签 javascript variables object properties scope

<分区>

这是我想要实现的:

let scope = { property: "value" };
function fun()
{
  //That's how I can get my variables:
  console.log(this.property);

  //And that's how I want to get them
  console.log(property);
}
fun.call(scope);

当然,bind() 函数不是那样工作的。我的想法是这样做:

let scope = { property: "value" }
function fun(scope)
{
  for (let p in scope)
  {
    if (scope.hasOwnProperty(p))
      window[p] = scope[p];
  }
  // Now it works
  console.log(property);
}
fun(scope);

不幸的是,这样做的变量是在全局范围内声明的,垃圾收集器不会在函数执行后释放它们。所以我还必须在我的函数末尾添加类似这样的内容:

for (let p in scope)
{
  if (scope.hasOwnProperty(p))
    delete window[p];
}

但众所周知,删除运算符非常繁重,因此我想省略使用它。 这就是为什么我正在寻找一种方法将对象属性转换为函数范围内的变量。

PS:我不能使用解构赋值,因为我不知道对象属性的名称。

最佳答案

除了使用窗口对象,您还可以选择使用 eval:

let scope = { property: "value" }
function fun(scope)
{
  for (let p in scope)
  {
    if (scope.hasOwnProperty(p))
      eval("var " + p + " = scope[p];");
  }
  console.log(property);
}
fun(scope);

另请参阅:How do i declare and use dynamic variables in javascript?

关于Javascript - 将对象属性转换为函数范围内的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43754035/

相关文章:

java - 如何定义一个 map 接受 Thrift 中不同类型的值?

javascript - 点击多个按钮

javascript - 本地 Passport 身份验证策略提供临时 header

javascript - 如何在 iPhone 上使 css3 的高度(和其他尺寸)过渡更平滑?

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

javascript - 对象数组与嵌套对象?

javascript - Vanilla JavaScript Convex Hull Google map 上意想不到的多边形形状

python mysql插入浮点变量错误

java - 如何读写抽象类的变量

javascript - 使用 lodash 获取对象的值