ES5中繼承主要3種方式:
- 1链峭、對(duì)象冒充
- 缺點(diǎn):無(wú)法調(diào)用原型鏈方法
- 2、原型鏈
- 缺點(diǎn):無(wú)法調(diào)用父類構(gòu)造方法
- 3、對(duì)象+原型鏈組合
- 解決對(duì)象冒充 和 原型鏈缺點(diǎn)
案例:
// es5 繼承
// es5中繼承主要2種方式:
// 1杖刷、對(duì)象冒充
// 2驳癌、原型鏈
// 定義類
function person(name, age){
this.name = name;
this.age = age
this.run = function(){
console.log(name + '跑步');
}
}
// 原型鏈掛載方法
// 多個(gè)實(shí)例共享原型鏈的方法
person.prototype.work = function(){
console.log(this.name + '工作');
}
var p = new person('張三', 20);
p.run();
p.work();
var pp = new person('張三豐', 33);
pp.run();
pp.work();
// 1、對(duì)象冒充方式
// 缺點(diǎn):無(wú)法調(diào)用原型鏈方法
function people(name, age){
person.call(this, name, age)
}
var p1 = new people('李四',30);
p1.run();
// p1.work(); // p1.work is not a function 無(wú)法調(diào)用原型鏈數(shù)據(jù)
// 2不瓶、原型鏈實(shí)現(xiàn)繼承
// 原型鏈缺點(diǎn)灾杰,無(wú)法調(diào)用父類構(gòu)造方法
function people2(name, age){
}
people2.prototype.work = person.prototype.work
var p2 = new people2('王五', 30);
p2.work(); // undefined工作,原型鏈缺點(diǎn)艳吠,無(wú)法調(diào)用父類構(gòu)造方法
// 3、對(duì)象 + 原型鏈實(shí)現(xiàn)繼承
function people3(name, age){
// 對(duì)象冒充
person.call(this, name, age);
}
// 原型鏈
people3.prototype = person.prototype;
var p3 = new people3('趙六', 40);
p3.run();
p3.work();