给出以下代码:
const civic = {make: 'Honda', model: 'Civic'};
function logArgs(make, model) {
console.log(make);
console.log(model)
}
我想这样做:
logArgs(...civic);
代替:
logArgs(civic.make, civic.model);
我得到:
(索引):39未捕获的TypeError:发现不可调用的@@ iterator
是否有某种方法可以解构数组之类的对象,或者我想做的是不可能的?
答案 0 :(得分:4)
const civic = {make: 'Honda', model: 'Civic'};
function logArgs({make, model}) {
console.log(make);
console.log(model)
}
logArgs(civic)
答案 1 :(得分:1)
logArgs(...Object.values(civic))
请注意,这将取决于对象的顺序,这可能很棘手
答案 2 :(得分:1)
要传播,您需要为对象实现Symbol.iterator
,因为对象没有内置的迭代器。
此方法仅采用值,但是其他任何方法也可以使用,例如返回条目。
function logArgs([make, model]) {
console.log(make);
console.log(model)
}
const civic = { make: 'Honda', model: 'Civic' };
civic[Symbol.iterator] = function* () {
yield Object.values(civic);
};
logArgs(...civic);
答案 3 :(得分:0)
在分解对象参数civic时,我们获得了更简洁的功能,或者您可以对civic
进行分解以分配不同的变量,如下所示
const civic = {make: 'Honda', model: 'Civic'};
const { make, model, year = "2019" } = civic;
console.log(make);
console.log(year);
function logArgs({make, model}) {
console.log(make);
console.log(model)
}
logArgs(civic)