举一个很常见的例子app
function Person(name){ this.name = name;
} Person.prototype.say = function(){ console.log(this.name); } let p = new Person("花花"); p.say(); //花花
为何会打印出“花花”?为何构造函数中的 this 就指向了 对象?函数
这就是 new 的原理起的做用:this
一、建立一个类的实例:建立一个空对象obj,而后把这个 obj 对象的 __proto__ 设置为Person.prototype;即建立一个继承自Person.prototype的新对象
spa
二、执行构造函数:执行的时候,相应的参数会被传入,this 会被指定为第1步建立的新实例;
prototype
三、返回对象:若是构造函数返回了一个新对象,那么这个新对象会取代步骤1中new出来的实例被返回。若是构造函数没有返回对象,那么new出来的结果为步骤1建立的对象code
New实现对象
function New(Person){ var obj = {'__proto__': Person.prototype}; //第一步
return function() { Person.apply(obj, arguments); //第二步
return obj; //第三步 } }