const obj = {
foo: 1,
bar: 2
};
let fn = (...obj) => {
console.log(foo, bar); // ReferenceError: foo is not defined
};
fn(obj);
我基本上想直接在函数内部使用对象道具,而不必使用obj.foo
或obj.bar
。
编辑后添加:我知道我可以手动定义args({ foo, bar }
),但是我不想这样做,因为该对象应该具有未知的/可变数字属性。
答案 0 :(得分:1)
对象的解构不同于数组:
const obj = {
foo: 1,
bar: 2
};
let fn = ({ foo, bar }) => {
console.log(foo, bar); // ReferenceError: foo is not defined
};
fn(obj);
如果只想遍历属性,也可以对值使用解构:
const obj = {
foo: 1,
bar: 2
};
let fn = (values) => {
console.log(...values); // ReferenceError: foo is not defined
};
fn(Object.values(obj));
答案 1 :(得分:1)
这有帮助吗?
我假设您是关注一些您确实了解的属性。 但是想保留其他人吗?
const obj = {
foo: 1,
bar: 2,
unknown: 3,
unknow: 4,
};
let fn = ({ foo, bar, ...other}) => {
console.log(foo, bar);
console.log(other);
};
fn(obj);
答案 2 :(得分:0)
这似乎是您要去的目标,至少要大致说一下,因为它确实有一个很大的警告。
我所要做的就是使用this
关键字,假设它也将变量名称封装在函数的上下文中。当然,在测试期间,我忘记了很多主要信息。在该上下文中使用this
关键字时,默认为包含上下文。在这种情况下,即为window
。因此,在窗口对象上设置键名会污染全局范围或包含范围的所有范围,尽管我尚未在基于类的上下文中对此进行过测试。
const obj1 = {varname1: "this is variable name 1", varname2: "this is variable name 2"};
function createsVars(obj) {
var keys = Object.keys(obj);
for (let i = 0; i < keys.length; i++) {
this[keys[i]] = obj[keys[i]];
}
console.log(varname1, "|", varname2);
}
createsVars(obj1);