一道解构面试题
使这段代码成立:let [a, b] = { a: 1, b: 2 }
直接进行结构会报错提示is not iterable,这是因为对象是不可迭代的,所以我们只需要使对象满足可迭代协议,这就需要使用[Symbol.iterator],这里就有两种方法迭代器和生成器
//生迭代器 这里直接是在对象中添加实现,改动了对象
let [a, b] = {
a: 1,
b: 2,
[Symbol.iterator]() {
const arr = Object.values(this)
return arr[Symbol.iterator]()
}
}
//在不改变对象的前提下就可以在对象原型上添加
Object.prototype[Symbol.iterator] = function () {
return Object.values(this)[Symbol.iterator]()
}
//生成器
Object.prototype[Symbol.iterator] = function* () {
return yield* Object.values(this)
}