# 手写 new

new 运算符用于创建一个对象类型的实例,该对象类型可以是用户自定义的,也可以是具有构造函数的内置对象。

new constructor(args)
1

new 的时候发生了以下几个步骤:

  1. 创建一个空对象(即{});
  2. 链接该对象(设置该对象的 constructor )到另一个对象 ;
  3. 将步骤 1 新创建的对象作为 this 的上下文;
  4. 如果该函数没有返回对象,则返回 this

使用 Object.create(proto) (opens new window) 可以将 1.2 步合并

function myNew(constructorFn, ...args) {
    const obj = Object.create(constructorFn.prototype)
    const res = constructorFn.apply(obj, args)
    return res !== undefined ? res : obj
}
1
2
3
4
最后更新时间: 7/29/2021, 9:30:27 PM