众所周知,大多数的语言中都有new这个关键词,没有对象,那就new一个吧。
在js中,new主要完成了四件事情
1 // new 做了什么 2 const obj = {} 3 obj.__proto__ = create.prototype 4 // 构造函数如果有返回值得话,就返回这个对象,没有返回对象的话就返回创建的这个obj 5 var result = create.call(obj,this.arguments) 6 return result instanceof Object?result:obj
1.创建一个空的对象
2.第二,每个对象都有一个隐形原型属性:__proto__,这个属性指向的是构造函数的原型(js原型、原型链知识)
就是obj.__proto__ = create.prototype
3.然后利用call函数改变create函数的内部this指向为obj
4.判断构造函数是否有返回对象,如果返回对象的话new就返回那个对象(代码中的result),否则返回新创建的obj