關於js原型繼承

2022-05-06 14:21:10 字數 1171 閱讀 1598

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屬性。該屬性是個指標,指向了乙個物件,我們稱之為原型物件。什麼是指標?指標就好比學生的學號,原型物件則是那個學生。我們通過學號找到唯一的那個學生。假設突然,指標...