new做了那些事

  1. 创建了一个新的对象
  2. 把this指向这个新创建的对象
  3. 执行函数里面的方法(例如设置属性和方法)
  4. 返回这个对象

构造函数

  1. 构造函数里面如果返回了一个对象,new 执行的时候则以返回的这个对象为准
  2. 当构造函数执行结果不是一个对象的时候,就返回的新创建的对象,新对象继承了构造函数的原型对象

一步一步的操作

const resultObj = myNew(Fn)

function myNew(Fn, ...args) {
  const obj = Object.create(fn.prototype);
  const result = Fn.apply(obj, args)
  return typeof result === 'object' ? result : obj // 如果 执行结果是一个对象,那么就返回执行结果 否则返回新建对象
}

很有意思的题目

https://juejin.cn/post/6911320761349193736
Last modification:March 10, 2021
If you think my article is useful to you, please feel free to appreciate