【发布时间】:2017-05-17 13:49:01
【问题描述】:
我写了一个简单的对象解构函数,它通过将属性分配给范围对象来声明给定范围内的变量
我可以在生产中使用这个函数吗?如果不能,使用这个函数有什么陷阱?
function destructure(obj, scope) {
scope = scope || this;
Object.keys(obj).forEach(key => {
if (scope[key] === undefined) {
scope[key] = obj[key];
} else {
throw new Error(key + ' variable is already declared.');
}
});
}
var o = {
one: 1,
two: 2,
three: 3,
four: 4
};
destructure(o);
console.log(one); // 1
console.log(two); // 2
console.log(three); // 3
console.log(four); // 4
【问题讨论】:
-
您假设 this 指向全局对象,但情况并非总是如此。例如,在严格模式下,this 并不指向全局对象。
-
一个“陷阱”通常是当你试图达到
A,但没有意识到你最终得到的是Á(非常相似但略有不同)。但也许你真的想做Á并且完全了解其中的含义。因此,为了向您展示可能存在的陷阱,我们需要知道您真正想要实现的目标。 -
我想用这个函数作为一个助手来解构一个函数的参数,这个函数是具有许多属性的对象。
-
您真的要将对象的所有属性添加到全局范围吗?为什么?下面你说你正在使用 Node.js。我认为 Node 的主要好处之一是能够将代码划分为模块。从这个角度来看,向全局范围/对象添加值似乎是倒退了一步。如果您计划将对象的属性添加到调用函数的范围,那么这通常是不可能的。函数/模块范围不受对象支持,也无法将它们称为对象。
标签: javascript node.js ecmascript-6