物件的繼承

2022-02-26 05:31:22 字數 2669 閱讀 8216

一、原型繼承 

缺點:1、不能給父級建構函式傳參

2、父級建構函式中引用型別的資料,會被自己建構函式例項共享

ps:這是下面例項中的2只貓,是不是萌萌噠!

這是小7

這是8哥

function

animal(name,age)

animal.prototype.say = function

() function

cat(color)

cat.prototype = new animal('八哥','1')

var cat1 = new cat('白色')

cat1.hobby.push('sleep')

var cat2 = new cat('花色')

console.log(111,cat1.say()) //

["music", "dance", "sleep"]

console.log(2222,cat2.say()) //

["music", "dance", "sleep"]

console.log(333,cat1.name) //

八哥console.log(444,cat1.age) //

1console.log(555,cat1.color) //

白色

二、借用建構函式繼承

缺點:無法繼承原型中的方法

function

animal(name)

animal.prototype.say = function

() function

cat(color,name)

var cat1 = new cat('白色','8哥')

cat1.hobby.push('sleep')

var cat2 = new cat('花色','小七')

//報錯 cat1.say is not a function

console.log(333,cat1.name) //

八哥console.log(444,cat1.color) //

白色console.log(555,cat2.name) //

小七console.log(666,cat2.color) //

花色

三、組合繼承

完美的解決了前面2種方式造成的缺陷,但是我們會發現建構函式的屬性會有冗餘

function

animal(name)

animal.prototype.say = function

() function

cat(color,name)

cat.prototype = new animal('66')

var cat1 = new cat('白色','8哥')

cat1.hobby.push('sleep')

var cat2 = new cat('花色','小七')

console.log(111,cat1.say()) //

["music", "dance", "sleep"]

console.log(222,cat2.say()) //

["music", "dance"]

console.log(333,cat1.name) //

八哥console.log(444,cat1.color) //

白色console.log(555,cat2.name) //

小七console.log(666,cat2.color) //

花色

四、公升級一下

function animal(name)

animal.prototype.say = function()

function cat(color,name)

cat.prototype = animal.prototype

var cat1 = new cat('白色','8哥')

console.log(111,cat1 instanceof cat)//true

console.log(222,cat1 instanceof animal)//true

console.log(333,cat1.constructor)//animal

我們會發現,判斷例項的建構函式列印出來的跟我們預期不符

優化function animal(name)

animal.prototype.say = function()

function cat(color,name)

cat.prototype = object.create(animal.prototype) 

cat.prototype.constructor = cat

var cat1 = new cat('白色','8哥')

console.log(111,cat1 instanceof cat)//true

console.log(222,cat1 instanceof animal)//true

console.log(333,cat1.constructor)//cat

物件導向。物件的繼承

1.原型繼承 將父類的例項賦值給子類的原型 這就是原型繼承 將父類的私有和公有都繼承在子類的原型上,成為子類的公有屬性。2.call繼承 將父類私有的繼承為子類私有的 3.冒充物件繼承 將父類私有的和公有的都繼承為子類私有的 4.混合繼承 私有的繼承為私有的,公有的和私有的再次繼承為公有的 混合繼承...

物件導向的繼承(拷貝繼承)

在原有物件的基礎上,稍微修改後得到新的物件 不會影響原物件的功能 子類不影響父類,子類可以繼承父類的一些功能 呼叫父類的建構函式,使用call方法改變this指向問題。for in 拷貝繼承 extend function createperson name,createperson.prototy...

物件導向的 繼承

1 什麼是繼承 繼承是一種新建類的方式,新建的類稱之為子類,被繼承的類稱之為基類 父類 超類 繼承描述的是一種 遺傳 的關係 子類可以重用父類的屬性 在python中的繼承注意兩點 1.在python中支援乙個子類同時繼承多個父類,2.python中類分為兩種 新式類 但凡繼承object的類,以及...