js中的new操做符原理

举一个很常见的例子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; //第三步 } }
相关文章
相关标签/搜索