一道解构的面试题
源码
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)
}