JS繼承 原型的應用

2021-06-26 10:21:07 字數 1608 閱讀 2106

前面我們知道js是基於物件程式設計的一種指令碼語言,在js本著一切皆物件的原則,物件之間也涉及到了繼承,不過這裡的繼承與我們以往學習過的繼承有所不同,它運用的是物件的原型,來構造乙個原型鏈來實現對超類物件的繼承。

1、如何實現物件繼承 

function box() 

desk.prototype = new box(); //子類繼承desk,繼承了 box,通過原型,形成鏈條

繼承原理小結

1、通過原型鏈繼承:超型別例項化後的物件例項賦給子類物件的原型屬性

2、new box()會將超類物件建構函式和原型中的資訊都交給子類物件,即繼承全部資訊

3、利用instanceof來判斷子類是否從屬於某個超類。

4、子類繼承時,優先選擇例項中的屬性值(如果出現原型與構造例項衝突時)。

2、繼承中的問題

上篇部落格中還有乙個遺留問題,原型函式共享帶來無法重寫的問題,那麼在繼承中,同樣因為共享而無法進行重寫,同時,子類無法給超類進行傳參。對於這個問題,js中可採用物件冒充來解決。

function box(age) 

function desk(age)

var desk = new desk(200);

alert(desk.age);

物件冒充swot分析

1、實現了子類為超類物件進行傳參問題

2、只能冒充建構函式中資訊,不能冒充原型中的資訊

當然,我們可以將所有資訊寫進建構函式中,但這樣消耗記憶體空間太大,所以,這裡可以採用原型鏈+建構函式的方式來實現,即組合模式:

function box(age) 

box.prototype.run = function () ;

function desk(age)

desk.prototype = new box(); //原型鏈繼承,繼承全部資訊,第一次呼叫超型別

var desk = new desk(100);

alert(desk.run());

同時,還可以利用原型式繼承等方法來實現物件傳參問題,只需乙個中轉函式來協助返回乙個例項化後的物件即可。

function obj(o)  //建立乙個建構函式

f.prototype = o; //把字面量函式賦值給建構函式的原型

return new f(); //最終返回出例項化的建構函式

}var box = ;

box1.name = 'jack';

alert(box1.name);

但是原型式繼承中由於中轉函式中建構函式採用原型鏈繼承,因此會出現引用型別共享問題,所以,通常不採用此種方法。

綜上:js繼承中通常可採用組合式繼承來實現為超類傳參和重寫問題,有時,由於為了更好的封裝,解決組合中二次呼叫超型別問題,也會採用寄生組合繼承來實現,這裡還需要乙個中轉和寄生函式來實現。這個還有待深入學習。。。

js繼承(一)原型繼承

正式開工了 繼承在js中有著很大的地位,同時理解起來也比較抽象,我將分幾篇部落格來記錄js的繼承。原型繼承 相當於將父類物件與子類物件打通橋梁,可以靈活實現追加屬性與行為 子類擁有父類的一切行為和屬性。特點 非常純粹的繼承關係,例項是子類的例項,也是父類的例項 父類新增原型方法 原型屬性,子類都能訪...

js繼承,原型鏈繼承

1 乙個型別的物件能夠訪問另外乙個型別的屬性和方法 2 類與類之間的關係 類就是眾多例項共有的屬性和方法的乙個抽象 function animal name animal.prototype.say function function dog 把子類的原型指向父類的例項 dog.prototype ...

js繼承之原型繼承

物件導向程式設計都會涉及到繼承這個概念,js中實現繼承的方式主要是通過原型鏈的方法。每建立乙個函式,該函式就會自動帶有乙個prototype屬性。該屬性是個指標,指向了乙個物件,我們稱之為原型物件。什麼是指標?指標就好比學生的學號,原型物件則是那個學生。我們通過學號找到唯一的那個學生。假設突然,指標...