举一个栗子:
function(name,age){
this.name = name;
this.age = age;
}
let person = new Person('yy',18)
像上面这么new 一个对象可以分成四个阶段:
1、创建了一个空对象
var obj = new Object();
2、让Person中的this指向obj,并执行Person的函数体
var result = Person.call(obj);
3、设置原型链,将obj的__proto__成员指向了Person函数对象的prototype成员对象
obj.__protp__ = Person.prototype;
4、判断Person的返回值类型,如果是引用类型,就返回这个引用类型的对象,如果是值类型,就返回obj。
if(typeof(result) == 'object'){
person = result;
}else{
person = obj;
}