要想实现new,要先知道new做了什么
function Person(name, age){
this.name = name
this.age = age
}
let gailun = new Person('gailun', 18)
如上述代码,我们通过new创建了一个Person对象
new做了哪些事情
1、创建了一个空对象this
2、给this添加__proto__ = Person.prototype
3、向this身上添加属性,name age
4、若构造函数有返回值且是一个对象,则返回该对象,否则返回this
new的实现
function myNew(){
let obj = {}
Constructor = [].shift.call(arguments)
obj.__proto__ = Constructor.prototype
let ret = Constructor.apply(obj, arguments)
return typeof ret === 'object' ? ret : obj
}
自定义new的使用
function Person(name, age){
this.name = name
this.age = age
}
let yasuo = myNew(Person, 'yasuo', 17)
如图使用自定义的new创建了一个Person对象