js手写实现new操作符
// 用函数来实现new
function myNew(constructor){
//创建一个对象
let obj = {}
//连接原型链,obj.__proto__ 不标准
obj = Object.create(constructor.prototype) //等同于 obj.__proto__ = constructor.prototype
//传参
let result = constructor.apply(obj,Array.from(arguments).slice(1))
//当构造函数本身会返回一个非null的对象时,则通过new会返回这个对象,其他情况还是会返回新生成的对象
return result instanceof Object ? result : obj
}
function Dog(name,age){
this.name = name
this.age = age
}
Dog.prototype.wang = function(){
console.log('汪汪汪')
}
//调用myNew时传入第一个参数是构造函数
let dog1 = myNew(Dog,'大黄','25')
dog1.wang() //汪汪汪