JavaScript - New之后发生了什么?
new
new运算符允许开发人员创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。
- 1、创建一个
空对象
,作为将要返回的对象实例 - 2、将这个空对象的原型,指向了构造函数的
prototype
对象 - 3、将函数的
this
指向这个空对象,执行构造函数的代码(为这个新对象添加属性) - 4、判断函数的返回值类型。
具体实现
newjavascript
12345678910function 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
123456789function Person(name) {this.name = name}const p1 = new Person('p1')const p2 = myNew(Person, 'p2')console.log('p1', p1 instanceof Person) // -> trueconsole.log('p2', p2 instanceof Person) // -> true