仿造new创建对象的过程写一个函数实现

1.创建一个对象
2.执行构造函数,将this指向刚才创建的对象
3.如果该构造函数有返回值,且为对象类型,则直接返回该对象
4.将obj的__proto__指向构造函数的prototype,并将obj的__proto__下的constructor指向构造函数
5.返回创建的对象

代码如下:

 function newInstance (Fn,...argument) {

 // 1.创建一个空对象

 const obj = {}

 // 2.执行构造函数,并将this指向obj

 const result = Fn.call(obj,...argument)

 // 3.如果该构造函数的返回值是Object类型则返回该对象

 if (result instanceof Object) {

 return result

 }

 // 4.将obj的_proto_指向构造函数的prototype,并将obj的_proto_下的constructor指向构造函数

 obj.__proto__ = Fn.prototype

 obj.__proto__.constructor = Fn

  
 // 返回该对象

 return obj

 }

验证实现效果:

 function Person (name, age) {

 this.name = name

 this.age = age

 }

 Person.prototype.type = 'human' 

 let person = newInstance(Person,'wade',42)

 console.log(person)

image.png


XiaoYu
7 声望0 粉丝

如其所是