开始
let [x, y] = { x: 1, y: 2 };
正常的写法:
let { x, y } = { x: 1, y: 2 };
console.log(x, y); //1 2
let [x, y] = [1, 2];
console.log(x, y); //1 2
加上iterator方法
如果我们希望这段代码不报错,就需要给它加上iterator方法。
let [x, y] = { x: 1, y: 2 };
这样修改就不会报错了
let obj = { x: 1, y: 2 };
obj[Symbol.iterator] = function* () {
yield this.x;
yield this.y;
};
let [x, y] = obj;
console.log(x);
console.log(y);
我们给它添加了一个生成器函数,执行该生成器函数,会返回一个迭代器。
什么是生成器和迭代器
let generator = function* () {
yield "1";
yield "2";
};
//执行生成器函数会返回一个迭代器
let iterator = generator();
console.log(iterator.next());
console.log(iterator.next());
数组解构的本质
let obj = { x: 1, y: 2 };
obj[Symbol.iterator] = function* () {
yield this.x;
yield this.y;
};
let iterator = obj[Symbol.iterator]();
let x = iterator.next().value;
let y = iterator.next().value;
console.log(x, y);