1.借用建構函式
//父類
function
parent()
//子類
function
child
(name)
parent.protorype.
show
=function()
//給父類的原型物件上加乙個show方法,此時子類例項化出來的物件就訪問不到該方法
/** * 例項化
*/var s1 =
newchild
("zhangsan");
//此時s1物件中就有了父類的arr屬性
缺點:不能訪問父類建構函式原型鏈上的屬性和方法
2.借用原型鏈
//父類
function
parent()
//子類
function
child
(name)
child.prototype =
newparent()
;//將parent例項物件賦值給child原型物件
//child類中沒有arr這個屬性,所以會去它的原型物件上去找
/** * 例項化
*/var s1 =
newchild
("zhangsan");
//此時s1物件中就有了父類的arr屬性
var s2 =
newchild
("lisi");
s1.__proto__===s2.__proto__//true
優點:子類物件繼承了父類建構函式的原型物件
缺點:子類建構函式建立出來的物件共用同乙個原型物件
3.組合繼承
//父類
function
parent()
//子類
function
child
(name)
child.prototype =
newparent()
;/**
1. 例項化
*/var s1 =
newchild
("zhangsan");
var s2 =
newchild
("lisi"
);
優點:解決了子類建構函式建立出來的物件共用乙個原型物件的問題,同時也繼承了父類原型物件上的屬性和方法
缺點: 1. 重複的例項化了parent建構函式
2. 子類建立出來的物件的constructor屬性指向了parent類
組合繼承優化
//父類
function
parent()
//子類
function
child
(name)
child.prototype = parent.prototype;
child.prototype.constructor = child;
//將子類原型物件的constructor屬性指向子類建構函式
原生js實現繼承的三種方式
function parent name,age function child name,age,gender const ming newchild ming 18 男 console.log ming 2 原型鏈繼承 優點 實現了原型物件內的函式復用.缺點 雖然得到了屬性值,但無法在例項物件內靈...
三種繼承方式
派生類繼承了基類的全部資料成員和除了建構函式,析構函式之外的全部資料成員,但是這些成員的訪問屬性在派生的過程中是可以調整的。從基類繼承的成員,其訪問屬性由繼承方式控制。類的公有繼承 當繼承方式為公有繼承時,基類的公有成員和保護成員的訪問屬性在派生類中不變,而基類的私有成員不可直接訪問。類的私有繼承 ...
三種繼承方式
三種繼承方式 公有繼承 私有繼承,保護繼承 不同繼承方式的影響主要體現在 公有繼承 標頭檔案部分 ifndef point h define point h class point void move int offx,int offy int getx const int gety const p...