5個原型規則
-
所有的引用類型(數組,對象,函數),都具有對象特性,即可自由擴展屬性(除了null以外)
-
所有的引用類型(數組,對象,函數),都有一個_ proto _(隱式原型)屬性,屬性值是一個普通對象
-
所有的函數,都有一個prototype(顯式原型)屬性,屬性值也是一個普通對象
-
所有的引用類型(數組,對象,函數),_ proto _屬性值指向他的構造函數的prototype屬性
-
當試圖得到一個對象的某個屬性時,如果這個對象本身沒有這個屬性,那麼會去它的_ proto _(即它的構造函數的prototype)
例:
// 構造函數 function Foo(name) { this.name = name } Foo.prototype.alertName = function() { alert(this.name) } // 創建示例 var f = new Foo('zhangsan') f.printName = function () { console.log(this.name) } // 測試 f.printName() f.alertName()
原型鏈
示例中
f.alertName()
就需要到f._proto_
中也就是Foo.prototype
(Foo的原型對象)中查找f.toString()
就要去f._proto_._proto_
中查找