1.原型鏈繼承
function
a(firstname)
a.prototype.
getfirstname
=function()
function
b(lastname)
b.prototype=
newa
("遠");
b.prototype.
getlastname
=function()
var person=
newb
("方");
person.
getfirstname()
;person.
getlastname()
;
缺點:由於所有的引用型別的原型的屬性會被所有例項共享,所以沒有辦法在不影響所有物件例項的情況下,給父型別的建構函式傳遞引數。
2.借用建構函式繼承
function
a(firstname)
function
b(lastname)
var person=
newb
("方");
console.
log(person.firstname)
;console.
log(person.lastname)
;
缺點:父類的方法會被建立多次
3.組合繼承(原型鏈和借用建構函式組合)
function
a(firstname)
a.prototype.
getfirstname
=function()
function
b(firstname,lastname)
b.prototype=
newa()
;a.prototype.constructor=b;
b.prototype.
getlastname
=function()
var person=
newb
("遠"
,"方");
person.
getfirstname()
;person.
getlastname()
;
組合繼承的缺點:父類的構造器被呼叫了兩次
4.寄生式繼承
function
a(original)
return clone;
}var person=
;varb=
a(person);b
.getname()
;
5.寄生組合式繼承
function
object
(o)f
.prototype=o;
return
newf()
;}function
inheritprototype(b
,a)function
a(firstname)
a.prototype.
getfirstname
=function()
function
b(firstname,lastname)
inheritprototype(b
,a);
b.prototype.
getlastname
=function()
var person=
newb
("遠"
,"方");
person.
getfirstname()
;person.
getlastname()
;
6.class繼承
class
aprint()
}class
bextendsam
()}let num=
newb(1
,2,3
);num.m(
);//1console.
log(num instanceofa)
;//true
console.
log(num instanceofb)
;//true
super()方法在這裡相當於a.prototype.constructor.call(this);
作為函式時,super()只能在子類的建構函式之中,用在其他地方就會報錯
super作為物件時,在普通方法中指向父類的原型物件,在靜態方法中指向父類。
繼承的多種方式
常用的繼承方法 1.原生繼承 抽取共同點 人類 function people name,age,people.prototype.say function people.prototype.breath function 學生類 function student name,age,studentn...
JavaScript 繼承 組合繼承
繼承 組合繼承 組合繼承也叫做偽經典繼承,指的是將原型鏈和借用建構函式的技術組合到一塊,從而發揮二者之長的一種繼承模式。組合繼承的基本思路是使用原型鏈實現對原型屬性和和方法的繼承,而通過借用建構函式來實現對例項屬性的繼承。組合繼承通過在原型上定義方法實現了函式復用,又能夠保證每個例項都有它自己的屬性...
C 的多種繼承方式
繼承的意義在於 可以復用,在原有的基礎上新增新功能就變成了新一代產品了 就像移動 發展史一樣,從大哥大到現在的智慧型手機,代代相傳添磚加瓦,單車變摩托,平房變別墅。究其本質是不變的 繼承也是為了多型服務的。class的繼承分為單繼承,多繼承,菱形繼承,虛擬繼承,菱形虛擬繼承。單繼承 單繼承就是子類d...