構造函數
特點:一般函數名是大寫開頭,就是構造函數。(良好的書寫習慣,受人待見。)
構造函數.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