JavaScript - New之后发生了什么?

New

  • 1、创建一个空对象,作为将要返回的对象实例
  • 2、将这个空对象的原型,指向了构造函数的prototype对象
  • 3、将函数的this指向这个空对象,执行构造函数的代码(为这个新对象添加属性)
  • 4、判断函数的返回值类型。

具体实现

javascript
12345678910
function myNew(Func, ...args) {
// 1.创建一个新对象
const obj = {}
// 2.新对象原型指向构造函数原型对象
obj.__proto__ = Func.prototype
// 3.将构建函数的this指向新对象
let result = Func.apply(obj, args)
// 4.根据返回值判断
return result instanceof Object ? result : obj
}

测试如下

javascript
123456789
function Person(name) {
this.name = name
}
const p1 = new Person('p1')
const p2 = myNew(Person, 'p2')
console.log('p1', p1 instanceof Person) // -> true
console.log('p2', p2 instanceof Person) // -> true