淺談prototype與__proto__、constructor三者之間的關係

一、關於prototype?函數

  a.每一個函數中都有一個prototype屬性,這個屬性叫作原型。spa

  b.prototype指向的這個對象就叫原型對象。prototype

  c.prototype表示了一個類的屬性的集合。3d

二、原型對象中包含有constructor和__proto__。對象

  

  

三、當經過new將該函數實例化後,其內部方法也可用實例對象調用。blog

  如:var ABC=new wxy();繼承

    ABC.case();內存

  當未被實例化時也可直接聲明其內部方法調用。原型鏈

  如:wxy.case();原型

四、咱們能夠經過prototype給原型添加方法

  

  

五、由上圖能夠看出經過prototype給wxy添加了case方法。且經過prototype添加的case方法是存放在__proto__中的,那麼咱們就能夠先大膽猜想一下prototype是否與__proto__相等。

  

  

  上圖打印結果能夠發現構造函數中的prototype原型與實例化對象中的__proto__是恆等的。

六、下面來了解一下__proto__

  a.每個對象中都會有一個__proto__屬性

  b.__proto__指向了一個對象,這個對象是原型對象

  c.實例化對象能夠直接訪問__proto__裏面的一些方法

七、由__proto__組成的鏈條叫作原型鏈。在使用New方法初始化函數的時獲得的新對象的__proto__屬性會指向函數對象的原型對象,而函數對象的原型對象又繼承至原始對象。把這個由__proto__串起來的鏈叫作原型鏈。原型鏈實際上就是js中數據繼承的繼承鏈。

  

八、由以上敘述就可總結出prototype的做用有:

  a.節約內存

  b.擴展屬性和方法

   c.能夠實現類的繼承
九、接下來用一張圖表示prototype與__proto__、constructor之間的關係
  
  建立一個構造函數時,這個構造函數內部會有一個prototype原型,這個原型內部可存放不少的方法跟屬性,其內部還包含一個constructor構造器,這個構造器指向建立本身的八個構造函數,當實例化該函數是時,實例化對象中會出現__proto__屬性,這個屬性指向建立本身的那個構造函數的原型對象,該原型對象中的屬性和方法均可使用。
相關文章
相關標籤/搜索