什么也不多说, 直接上代码!!!
function myNew(constructor,...args){
//创建一个空对象并将其原型指向构造函数的原型
const obj = Object.create(constructor.prototype)
//调用构造函数,并将空对象绑定到this上下文中
const res = constructor.apply(obj, args)
//如果构造函数返回了其他对象则直接返回该对象
if(typeof res === 'object' && res !== null){
return res;
}
//否则返回创建对象
return obj;
}
//示例
function Person(name,age){
this.name = name
this.age = age
}
const newValue = myNew(Person,'卡卡西',18)
console.log(newValue)//Person { name: '卡卡东', age: 18 }
- 创建一个空的对象, 将空对象的原型指向构造函数的原型
- 调用构造函数并修改this指向
- 如果构造函数又返回对象则使用构造函数返回的对象
- 如果 3 不成立, 则返回新创建的对象