自定义new方法
function myNew(fn, ...args) {
// 创建一个空对象
const obj = {}
// 对象的隐式原型指向构造函数的显式原型
obj.__proto__ = fn.prototype
// 执行构造函数,修改this指向,指向新的对象,并保存函数返回值
const result = fn.apply(obj, args)
// 判断返回值类型,对象则处理后返回,值类型则直接返回新对象
return result instanceof Object ? result : obj
}
使用
function Person() {
return {
name: 'zs'
}
}
const p = myNew(Person)
console.log(p); // {name: 'zs'}