# 手写 new
new 运算符用于创建一个对象类型的实例,该对象类型可以是用户自定义的,也可以是具有构造函数的内置对象。
new constructor(args)
1
new 的时候发生了以下几个步骤:
- 创建一个空对象(即{});
- 链接该对象(设置该对象的
constructor
)到另一个对象 ; - 将步骤 1 新创建的对象作为
this
的上下文; - 如果该函数没有返回对象,则返回
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
2
3
4