一,问题
如何让下面代码成立
var [a, b] = {a: 1,b: 2
}
console.log(a);
console.log(b);
二,分析
什么是可迭代对象?
满足可迭代协议的对象
含义:
1.具有Symbol.iterator
属性
2.Symbol.iterator
是一个函数
3.执行函数返回一个迭代器
迭代器
1.具有next
方法
2.执行next
方法返回一个对象
3.返回的对象具有value
和done
属性
4.value
表示当前值
5.done
表示是否迭代完成
var arr = [1, 2]
/* var [a, b] = arr */// 解构就是一个语法糖,本质就是以下代码
const iter = arr[Symbol.iterator]()
/* console.log(iter.next()); // {value: 1, done: false}
console.log(iter.next()); // {value: 2, done: false}
console.log(iter.next()); // {value: undefined, done: true} */const a = iter.next().value
const b = iter.next().value
console.log(a,b); // 1,2
三,方法
Object.prototype[Symbol.iterator] = function () {//const arr = Object.values([1,2])// return Object.values(this)[Symbol.iterator]()// yield* Object.values(this)const arr = Object.values(this)return arr[Symbol.iterator]()
}var [a, b] = {a: 1,b: 2
}
console.log(a); // 1
console.log(b); // 2