js物件導向之繼承

2022-09-01 04:21:10 字數 2110 閱讀 2967

原型鏈繼承

用法:把例項的父類給子函式的原型

缺點:1、因為修改了obj1.arr後obj2.arr也變了,因為來自原型物件的引用屬性裡所有例項共享的

2、建立子類例項時,無法向父類建構函式傳遞引數

1

function parent()78

function child(age)

1314 child.prototype=new parent(); //

原型鏈===》核心

1516

17var obj1 = new child(18);

18var obj2 = new

child();

19//

console.log(obj1.username);

2021 obj1.arr[0] = "張三";

2223

console.log(obj1.arr);

24 console.log(obj2.arr);

借用建構函式繼承

核心:借父類的建構函式來增強子類例項,就是說,相當於複製了乙份父類的屬性或者方法給子類了

優點:1、解決了子類例項共享父類引用屬性的問題

2、建立子類例項時,可以向父類建構函式傳遞引數

缺點:無法實現復用,每乙個子類例項都有乙個新的run函式,如果例項的物件多了,記憶體消耗過大

1

function

parent(name,arr)9}

1011

function

child(name,arr)

1819

var obj1 = new child("張三",[4,5,6]);

20var obj2 = new child("張三",[4,5,6]);

2122

/*console.log(obj1.username);

23console.log(obj2.username);

*/24

25 obj1.arr[0] = "你好建構函式";

26console.log( obj1.arr );

27 console.log( obj2.arr );

組合式繼承

優點:1》不存在引用屬性共享的問題

2》可傳遞引數

3》方法可復用

缺點:(小瑕疵)

子類原型上有乙份多餘的父類例項的屬性

1

function

parent(name,arr)

7 parent.prototype.run = function

();11

12function

child(name,arr)

1718 child.prototype=new parent(); //

原型鏈===》核心語句 1》不能傳遞引數2》arr是引用屬性,乙個改變,互相影響

1920

var obj1 = new child("張三",[1,2,3]);

21var obj2 = new child("李四",[1,2,3]);

原型式繼承

核心:用乙個函式,生出來乙個新的物件  

優點:從已有物件繁衍出新的物件,不需要建立自定義型別

缺點:1、原型的引用屬性會互相影響(公用乙個位址)               

2、無法實現**復用,屬性是後新增的,都沒用到函式封裝

1

function fn(obj)//

建構函式

45 f.prototype=obj; //

f新的物件67

return

newf();89

}1011var obj =;

17 obj1.aa = "李四";

18 obj2.bb = "你好js";

1920

var obj1 =fn(obj);

21var obj2 =fn(obj);

22 alert(obj1.name);

JS物件導向 繼承

參考博文 一 物件導向的繼承 1 解析 在原有物件的基礎上,略作修改,得到乙個新的物件,並且不影響原有物件的功能 2 如何新增繼承 拷貝繼承 屬性 call 方法 for in 繼承 子類不影響父類,子類可以繼承父類的一些功能 復用 屬性的繼承 呼叫父類的構造1函式 call 方法的繼承 for i...

js 物件導向 繼承

繼承 將方法的定義放在建構函式中,每建立乙個新物件,都會重複建立該方法一模一樣的副本,浪費記憶體。解決 如果多個子物件都要使用乙個相同的方法時,應該把這個方法放在一種原型物件中,建構函式中不再包含方法定義。原型物件 乙個型別中,專門為所有子物件集中儲存共有方法的物件。同一型別下多個子物件需要用乙個共...

JS 物件導向 繼承

實現繼承是 ecmascript 唯一支援的繼承方式,而這主要是通過原型鏈實現的建構函式 原型和例項的關係 每個建構函式都有乙個原型物件,原型有乙個屬性 constructor 指回建構函式,而例項有乙個內部指標 prototype 指向原型。建構函式 function father console...