手写new关键字
先上代码
function ournew(Func, ...argus) {
let obj = {}
obj.__proto__ = Func.prototype
let result = Func.apply(obj, argus)
if(result instanceof Object) {
return result
} else {
return obj
}
function Personal() {
this.name = name
this.age = age
}
let obj = ourNew(Personal, 'xiaoming', '18')
console.log(obj)
原理
new的手写主要有几个关键点
- 创建一个对象
- 创建的对象继承于某个函数对象的原型对象,这样就可以继承原型对象上的属性方法
- 改变this指向这个新创建的对象,这样就可以用this.xxx访问到原型对象的属性方法
- 最后返回这个this对象