ES5 繼承實現(xiàn)

ES5中繼承主要3種方式:

  • 1、對象冒充
    • 缺點:無法調(diào)用原型鏈方法
  • 2、原型鏈
    • 缺點:無法調(diào)用父類構(gòu)造方法
  • 3、對象+原型鏈組合
    • 解決對象冒充 和 原型鏈缺點

案例:

// es5 繼承
// es5中繼承主要2種方式:
    // 1、對象冒充
    // 2、原型鏈

// 定義類
function person(name, age){
    this.name = name;
    this.age = age
    
    this.run = function(){
        console.log(name + '跑步');
    }
}
// 原型鏈掛載方法
// 多個實例共享原型鏈的方法
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、對象冒充方式
// 缺點:無法調(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 無法調(diào)用原型鏈數(shù)據(jù)

// 2、原型鏈實現(xiàn)繼承
// 原型鏈缺點,無法調(diào)用父類構(gòu)造方法
function people2(name, age){

}
people2.prototype.work = person.prototype.work
var p2 = new people2('王五', 30);
p2.work(); // undefined工作,原型鏈缺點,無法調(diào)用父類構(gòu)造方法

// 3、對象 + 原型鏈實現(xiàn)繼承
function people3(name, age){
    // 對象冒充
    person.call(this, name, age);
}
// 原型鏈
people3.prototype = person.prototype;
var p3 = new people3('趙六', 40);
p3.run();
p3.work();

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容