new的底层原理是怎样实现的?我们只知道new操作符是把构造函数实例化成一个对象却不知道它的底层是怎么实现的,今天我们好好研究一下...
首先我们先想一下new操作符给我们做了一些什么,首先,构造函数直接成了一个对象给你,证明是通过函数返回的,并且我们传的参数也会添加到对象的原型里面。从这里开始想我们就有思路了。直接上代码
function myNew(fn,...args){
//我们直接创建一个对象,让构造函数的原型等于新创造函数的原型
const obj = Object.create(fn.prototype)
//我们需要改变this的指向,我们指向obj
const rel = fn.apply(obj,args)
//我们判断是不是传进来的是一个对象,如果是的话我们直接返回出来
return rel instanceof Object ? rel : obj
}
接下来直接使用
function Person(name,age) {
this.name=name
this.age=age
}
let person=myNew(Person,'ligo',18)
console.log(person)