这就是我想要实现的目标:
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:我不能使用解构赋值,因为我不知道对象属性的名称。
答案 0 :(得分:2)
除了使用窗口对象外,您还可以选择使用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?