关于javascript:手写new创建对象的过程

42次阅读

共计 637 个字符,预计需要花费 2 分钟才能阅读完成。

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

正文完
 0