js的每個類都有乙個prototype物件 訪問物件的屬性時,會先訪問到物件自身是否有定義這個屬性 如果沒有定義,就會去訪問物件所屬型別的prototype物件是否有此屬性
原型繼承就是把型別的prototype指向乙個父類的新物件,這樣每派生乙個新類出來都會構造乙個新的父類物件作為原型,這個物件和父類的prototype是分離的 因而可以用於新增子類的新屬性而不影響父類
> function cls()}undefined
> cls.prototype.xx = function()
[function]
> var x = new cls()
undefined
> x.xx()
22undefined
> x.xx = function()
[function]
> x.xx()
33undefined
> x instanceof cls
true
> cls.prototype.xx = function()
[function]
> x.xx()
33undefined
> var y = new cls()
undefined
> y.xx()
55undefined
> cls.prototype.xx = function()
[function]
> y.xx()
123undefined
> cls.prototype
cls
> typeof cls.prototype
'object'
>
在建構函式中賦值的屬性也能被派生類中使用,因為每個物件都執行了一次建構函式,每個物件都有乙個此屬性的定義 並且這個屬性是優先於prototype裡的屬性的 比如下面的例子:
> function cls()undefined
> cls.prototype.p = 22
22> var obj = new
cls()
undefined
>obj.p
11>
其實這個和lua利用元資料表的模擬繼承非常相似
關於原型繼承的寫法可以參見:
js繼承(一)原型繼承
正式開工了 繼承在js中有著很大的地位,同時理解起來也比較抽象,我將分幾篇部落格來記錄js的繼承。原型繼承 相當於將父類物件與子類物件打通橋梁,可以靈活實現追加屬性與行為 子類擁有父類的一切行為和屬性。特點 非常純粹的繼承關係,例項是子類的例項,也是父類的例項 父類新增原型方法 原型屬性,子類都能訪...
js繼承,原型鏈繼承
1 乙個型別的物件能夠訪問另外乙個型別的屬性和方法 2 類與類之間的關係 類就是眾多例項共有的屬性和方法的乙個抽象 function animal name animal.prototype.say function function dog 把子類的原型指向父類的例項 dog.prototype ...
js繼承之原型繼承
物件導向程式設計都會涉及到繼承這個概念,js中實現繼承的方式主要是通過原型鏈的方法。每建立乙個函式,該函式就會自動帶有乙個prototype屬性。該屬性是個指標,指向了乙個物件,我們稱之為原型物件。什麼是指標?指標就好比學生的學號,原型物件則是那個學生。我們通過學號找到唯一的那個學生。假設突然,指標...