原型和原型鏈

構造函數

特點:一般函數名是大寫開頭,就是構造函數。(良好的書寫習慣,受人待見。)


構造函數.png

this是空對象,然后賦值。

構造函數 - 擴展

  • var a = {}其實是 var a = new Object()的語法糖
  • var a = []其實是 var a = new Array()的語法糖
  • function Foo(){...}其實是 var Foo = new Function(...)
  • 使用 instanceof 判斷一個函數是否是一個變量的構造函數。
    (判斷一個變量是否為“數組”:變量 instanceof Array)

原型規則和示例

5條原型規則:原型規則是學習原型鏈的基礎

  • 所有引用類型(數組,對象,函數),都具有對象特性,即可自由擴展屬性(除了 “null”意外)


    圖片.png
  • 所有引用類型(數組,對象,函數),都有一個proto(隱式原型)屬性,屬性值是一個普通的對象

    圖片.png

  • 所有的函數,都有一個prototype(顯示原型)屬性,屬性值也是一個普通對象


    圖片.png
  • 所有引用類型(數組,對象,函數),porto屬性值指向他的構造函數的'portotype'的屬性值

    圖片.png

    圖片.png

  • this :通過對象屬性的形式去執行函數,還是自身的屬性,還是從原型中得到的屬性,他執行的函數的this,永遠指向(對象本身)f自身。


    圖片.png
  • for ( in )循環對象自身的屬性


    圖片.png

原型鏈

圖片.png

圖片.png

instancof

  • f instanceof Foo的邏輯是:
  • f 的proto一層一層往上,能否對應到Foo.portotype
  • 再試著判斷f instanceof Object
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容