一些繼承方法

2021-09-27 08:22:34 字數 3050 閱讀 8551

什麼是繼承?

乙個原本沒有某些方法和功能的物件,用過一些方法拿到另乙個物件的屬性和方法

建構函式的繼承:

function

fn(name)

}var obj1 =

newfn

("aaa");

var obj2 =

newfn

("bbb");

obj1.

show()

obj2.

show

()

function

father

(skill)

}function

son(abc)

var f =

newfather

("絕世木匠」)

;var s =

newson

("一般木匠");

f.show()

s.show()

;//優點:建立子類例項時,可以向父類的構造器傳參;

//缺點:只能繼承構造器中定義的屬性和方法,不能繼承原型上定義的屬性和方法

function

father

(name, age)

function

child1

(name, age)

function

child2

(name, age)

var first=

newchild1

('one',11

);var second=

newchild2

('two',22

);console.

log(first.category ,first.name,first.age)

// child1,one,11

console.

log(second.category ,second.name,second.age)

//child2,two,22

原型物件繼承:繼承原型

缺點:只能繼承原型,不能傳參

優點:簡單 方便 可以繼承原型上的屬性和方法

使原型prototype進行深拷貝

function

parent

(n) parent.prototype.

skill

=function()

function

child

(n)// 注意:物件的深淺拷貝

// child.prototype = parent.prototype;

for(

var i in parent.prototype)

// child.prototype.skill = function()

var p =

newparent

("大老王");

console.

log(p)

p.skill()

;var c =

newchild

("小老王");

console.

log(c)

c.skill()

;

原型鏈繼承:

通過給子設定例項的方式 給子新增一層原型鏈的方式

function

supertype()

supertype.prototype.

fun=

function()

;function

subtype()

//繼承了supertype

subtype.prototype =

newsupertype()

;//優點:既能繼承原型又能繼承建構函式

//缺點:複雜 不方便傳參

混合繼承:
function

father

(skill,id)

father.prototype.

show

=function()

function

son(

)//如果不做son的原型繼承father的原型,此時會報錯:son.show is not a function

for(

var i in father.prototype)

son.prototype.

show

=function()

var f =

newfather

("專家級鐵匠"

,"father");

var s =

newson

("熟練級鐵匠"

,"son");

f.show()

; s.

show()

;//優點:方便傳參 多繼承

//缺點:複雜

es6 class繼承:

class

child

extends

parent

}//建構函式 + 原型鏈

//extends 關鍵字繼承父級屬性的方法

//優點:簡單方便易操作 語法層面繼承 屬性和方法都能繼承 引數很好處理

//缺點:相容性 ie5

//super關鍵字既可以當做函式使用,也可以當做物件使用

//super作為函式呼叫時 代表父類建構函式 es6要求,子類的建構函式必須執行乙個super

//super作為物件使用時 在普通方法中指向父類的原型物件,在靜態方法中指向物件

檢測兩個物件之間是否存在繼承關係

fn.prototype.isprototypeof(f)檢視fn的prototype物件是否是f的原型

f instanceof fn 檢視 f 物件是否是建構函式 fn 的例項

JS物件繼承的一些方法

由於引用型別 陣列 物件 是按位址傳遞,直接拷貝是淺拷貝,即修改拷貝後的變數,原變數也會改變。有時需要深拷貝乙個物件,這時就需要遍歷徹底複製,使原物件和拷貝物件完全脫離關係。建立例項物件 var o var a object.create o a.color blue a.arr.push 2 co...

繼承的一些注意點

1.子類覆蓋的方法不能丟擲比父類方法更多的異常。2.父類靜態方法不能被子類非靜態方法覆蓋。3.父類非靜態方法不能被子類靜態方法覆蓋。4.private方法不能被覆蓋。5.父類非抽象方法可以被覆寫為抽象方法。6.在靜態方法或靜態的 塊中不能使用super關鍵字。7.成員變數屬於靜態繫結。class a...

JS繼承的一些見解

js在es6之前的繼承是五花八門的。而且要在專案中靈活運用物件導向寫法也是有點彆扭,更多的時候還是覺得面向過程的寫法更為簡單,效率也高。久而久之對js的繼承每隔一段時間就會理解出現困難。所以這次我要把對物件的理解寫下來,這樣應該就深刻一點了。我們先來看看乙個物件是怎麼生成的 三種建立物件的方法 va...