实现 new

正常 new 一个实例:

# 场景一
function foo () {
    this.a = 1
}
foo.prototype.b = 2
const bar = new foo()
console.log(bar) // {a: 1}
console.log(bar.b) // 2

# 场景二 构造函数返回一个对象
function foo () {
    this.a = 1
    return {a: 2}
}
const bar = new foo()
console.log(bar) // {a: 2}

“实现 new”继续阅读

迭代器(Iterator)和生成器(Generation)

一、用生成器给对象定义迭代器

常规方法

const obj = {
  a: 1,
  b: 2,
  c: 3,
  [Symbol.iterator]() {
    let [index, values] = [0, Object.values(this)]
    return {
      next() {
        const done = (index >= values.length)
        const value = done ? undefined : values[index++]
        return {
          done,
          value
        }
      }
    }
  }
}
for (let v of obj) {
  console.log(v) // 1 2 3
}

“迭代器(Iterator)和生成器(Generation)”继续阅读