仿造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)