1.原型鏈繼承
function
person
(name, age
)function
student
(study
)// 現在想讓學生也擁有姓名和年齡
// 第一種方法 原型鏈繼承
student
.prototype =
newperson
("李四",20
);// 學生也是人,也有姓名,年齡,學生有乙個單獨的屬性--->學習
var p1 =
newperson
("張三",18
);var p2 =
newstudent
("學js");
var p3 =
newstudent
("學js");
console.
log(p1.name)
console.
log(p2.study, p2.name,p2.age,p3.name)
問題:
1.來自person建構函式的所有屬性和方法被子類例項所繼承
2.建立子類(student)建構函式時無法向父類建構函式傳遞屬性
3.想要給子類新增屬性和方法必須要放到子類建構函式原型指向父類建構函式原型之前新增
理解即下圖:(純粹個人理解 有錯誤請大佬們指出)
2.建構函式繼承
// 通過call()讓student借用 person的屬性
function
person
(name, age
)person
.prototype.
catch
=function()
function
student
(name,age,study
)var p1 =
newperson
("張三",18
);var p2 =
newstudent
("李四",20
,"學js");
var p3 =
newstudent
("王五",20
,"學技術");
console.
log(p1,p2,p3)
輸入結果:
問題:1.借用父類建構函式來增強子類建構函式,使用call()繼承多個屬性
2.建立子例項物件時可以傳遞引數(學生可以擁有自己的姓名,年齡)
2.無法繼承父類的方法
3.混合繼承(原型鏈繼承+建構函式繼承(也叫借用函式繼承))
function
person
(name, age
)person
.prototype.
catch
=function()
function
student
(name,age,study
)student
.prototype=
newperson()
;// 給學生原型新增方法要放在改變原型指向後
student
.prototype.
eat=
function()
var p1 =
newperson
("張三",18
);var p2 =
newstudent
("李四",20
,"學js");
var p3 =
newstudent
("王五",20
,"學技術");
問題:1.子類建構函式建立例項時能傳遞引數
2.可以繼承父類建構函式原型中的方法
4.物件冒充(改變this指向)
function
person
(name, age)}
function
student
(name,age
)var p2 =
newstudent
("李四",20
,);var p3 =
newstudent
("王五",20
,"學技術");
p2.catch()
console.
log(p2,p3)
問題:
1.不能繼承父類建構函式原型上的方法
2.可以繼承父類建構函式內的屬性和方法
解釋: 通過在student中建立私有屬性 nwenmae,並且把person作為變數賦值給newnmae,所以在這裡this.newname是person建構函式,this.newname(name,age)呼叫person建構函式初始化屬性。delet刪除student中的newname屬性。
在student建立例項時,在student建構函式中把this傳遞給了person建構函式,並且把屬性放在person建構函式內初始化。
5:拷貝繼承
(1)直接賦值
var obj=
var obj2=obj
console.
log(obj2)
引用型別放在堆中他們是位址,在這裡新建立乙個變數obj2並且把obj的位址賦值給了obj2。所以,obj2中也有obj中的屬性和方法
(2)開闢新空間使用列舉法
function
person()
person
.prototype.nage=
"李四"
;person
.prototype.age=18;
var obj=
;for
(var key in
person
.prototype)
console.
log(obj)
JS 繼承方式
原型鏈繼承 所謂原型鏈繼承,就是根據js原型鏈的特性而實現的一種繼承方式。原型鏈特性 每個函式都自帶有乙個prototype屬性指向該函式對應的原型物件,而原型物件又會有乙個屬性指向該函式。而通過new 建構函式出來的例項,會有乙個屬性指向原型物件。1 原型鏈繼承 2 function supert...
js 繼承方式
父類 定義乙個動物類 function animal name 原型方法 animal.prototype.eat function food 1.原型繼承 核心 將父類的例項作為子類的原型 function cat cat.prototype new animal cat.prototype.na...
js繼承方式
一.原型鏈繼承 function parent function son son.prototype new parent 原理 子類的原型物件指向父類的例項。缺點 1.子類例項共享子類原型物件的引用屬性。2.建立子類的時候不能向父類建構函式傳參。二.建構函式繼承 function parent f...