基於類的繼承和基於原型的繼承相比較,各有什麼優劣

2022-07-21 17:54:11 字數 786 閱讀 9748

1、兩者的聯絡和區別(優缺點),關於原型繼承:

(1)原型繼承在有別於類繼承是因為繼承不在物件本身,而在物件的原型上(prototype);

(2)每乙個物件都有原型,在瀏覽器中它體現在乙個隱藏的__proto__屬性上;

(3)在一些現代瀏覽器中可以更改它們:比如在zepto中,就是通過新增zepto的fn物件到乙個空的陣列的__proto__屬性上去,從而使得該陣列成為乙個zepto物件並且擁有所有的方法;

(4)當乙個物件需要呼叫某個方法時,它回去最近的原型上查詢該方法,如果沒有找到,它會再次往下繼續查詢;逐級查詢,一直找到了要找的方法,這些查詢的原型構成了該物件的原型鏈條;

(5)原型最後指向的是null,原型繼承,就是將父對像的方法給子類的原型,但是子類的建構函式中不擁有這些方法和屬性。

2、關於基於類的繼承和原型對比起來,建構函式(類)式繼承的不同:

(1)建構函式繼承的方法都會存在父物件之中,每一次例項,都回將funciton儲存在記憶體中,這樣的做法會帶來效能上的問題;

(2)其次類式繼承是不可變的:在執行時,無法修改或者新增新的方法,這種方式是一種固步自封的死方法;

(3)而原型繼承是可以通過改變原型鏈結而對子類進行修改的,另外就是類式繼承不支援多重繼承,而對於原型繼承來說,只需要寫好extend對物件進行擴充套件即可。

3、組合模式,是結合類繼承和原型繼承的各自優點來進行對父類的繼承:

(1)用類式繼承屬性,而原型繼承方法:這種模式避免了屬性的公用;

(2)因為通常來說,每乙個子類的屬性都是私有的,而方法得到了統一。

javascript基於原型的繼承機制

請區分兩個物件 function物件及原型物件 以object為例 每個函式本身就是乙個建構函式 每個函式又對應乙個原型物件 1 當建立乙個變數時 var aa new object 等價於var aa aa.name fjs console.log aa.proto object.prototyp...

javascript 高階 基於原型鏈的繼承

function parent parent.prototype.parentvalue function function children 將children的原型指向parent的乙個例項,完成繼承 children.prototype new parent children.prototyp...

學習筆記 lua中基於原型的繼承

如何建立乙個基類 如何利用基類建立乙個例項 如何用基類派生乙個子類 如何用子類建立乙個例項 print 基於原型的繼承 理解為基類 robort function robort getid return self.id endfunction robort setid id self.id id e...