1. 程式人生 > >基於類的繼承和基於原型的繼承相比較,各有什麼優劣

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

 

1、兩者的聯絡和區別(優缺點),關於原型繼承: (1)原型繼承在有別於類繼承是因為繼承不在物件本身,而在物件的原型上(prototype); (2)每一個物件都有原型,在瀏覽器中它體現在一個隱藏的__proto__屬性上; (3)在一些現代瀏覽器中可以更改它們:比如在zepto中,就是通過新增zepto的fn物件到一個空的陣列的__proto__屬性上去,從而使得該陣列成為一個zepto物件並且擁有所有的方法; (4)當一個物件需要呼叫某個方法時,它回去最近的原型上查詢該方法,如果沒有找到,它會再次往下繼續查詢;逐級查詢,一直找到了要找的方法,這些查詢的原型構成了該物件的原型鏈條; (5)原型最後指向的是null,原型繼承,就是將父對像的方法給子類的原型,但是子類的建構函式中不擁有這些方法和屬性。 2、關於基於類的繼承和原型對比起來,建構函式(類)式繼承的不同: (1)建構函式繼承的方法都會存在父物件之中,每一次例項,都回將funciton儲存在記憶體中,這樣的做法會帶來效能上的問題; (2)其次類式繼承是不可變的:在執行時,無法修改或者新增新的方法,這種方式是一種固步自封的死方法; (3)而原型繼承是可以通過改變原型連結而對子類進行修改的,另外就是類式繼承不支援多重繼承,而對於原型繼承來說,只需要寫好extend對物件進行擴充套件即可。 3、組合模式,是結合類繼承和原型繼承的各自優點來進行對父類的繼承: (1)用類式繼承屬性,而原型繼承方法:這種模式避免了屬性的公用; (2)因為通常來說,每一個子類的屬性都是私有的,而方法得到了統一。