解构面试题

55 阅读1分钟

一道解构面试题

使这段代码成立: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)
}