原型鏈繼承
用法:把例項的父類給子函式的原型
缺點:1、因為修改了obj1.arr後obj2.arr也變了,因為來自原型物件的引用屬性裡所有例項共享的
2、建立子類例項時,無法向父類建構函式傳遞引數
1function 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函式,如果例項的物件多了,記憶體消耗過大
1function
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》方法可復用
缺點:(小瑕疵)
子類原型上有乙份多餘的父類例項的屬性
1function
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、無法實現**復用,屬性是後新增的,都沒用到函式封裝
1function 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...