首先我们要知道 new一个对象的时候他发生了什么。

其实就是在内部生成了一个对象,然后把你的属性这些附加到这个对象上,最后再返回这个对象。

function myNew(fn, ...args) {
// 基于原型链 创建一个新对象
let newObj = Object.create(fn.prototype)

// 添加属性到新对象上 并获取obj函数的结果
let res = fn.call(newObj, ...args)

// 如果执行结果有返回值并且是一个对象, 返回执行的结果, 否则, 返回新创建的对象
return res && typeof res === 'object' ? res : newObj;
}

作者:Ali2333

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。