我们要知道new做了哪些事
第一步:创建一个空对象
第二步:将创建的空对象的原型指向构造函数的原型
第三步:修改this指向
第四步:返回创建的对象
function myNew() {
// 首先创建了一个新的空对象
let newObject = {}
let [constructor, ...args] = arguments
let rst = null
if(typeof constructor !== 'function' ){
throw '构造函数类型错误'
}
// 将对象的原型指向构造函数的prototype
newObject = Object.create(constructor.prototype)
// 修改this指向,并调用函数,并保存结果
rst = constructor.apply(newObject,args)
if(rst && (typeof rst === 'function' || typeof rst === 'object')){
return rst
}else{
return newObject
}
}
function person(age,name){
this.age = age
this.name = name
}
let p1 = myNew(person,18,'yihua')
console.log(p1);