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; //第三步 } }
相關文章
相關標籤/搜索