Skip to content

一道解构的面试题

源码

ts
// 让下面等式成立
const [a, b] = {
  a: 3,
  b: 4,
}
console.log(a, b) // 3, 4

讲解

ts
/**
 * 数组解构的本质,调用`Symbol.iterator` 得到可迭代对象
 */
const arr = [3, 4]
const iter = arr[Symbol.iterator]()
const a = iter.next();
const b = iter.next();
console.log(a, b) // 3, 4

/**
 * 如果需要对象支持,扩充原始方法
 */
Object.prototype[Symbol.iterator] = function() {
  const arr = Object.values(this)
  // 返回一个迭代器
  return arr[Symbol.iterator]()
}
// 简写成生成器结构
Object.prototype[Symbol.iterator] = function* () {
  return Object.values(this)
}