继承的几种方式

本文深入探讨JavaScript中的四种经典继承方式:传统继承通过原型链、借用构造函数、共享原型及圣杯模式。每种方式均有其独特优缺点,如原型链可能导致过多的继承链,而借用构造函数无法继承原型等。文章通过具体示例代码,帮助读者理解不同继承模式的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.传统继承 --》原型链
缺点:过多的继承链没用的属性

     Grand.prototype.lastName = '张三';
     function Grand(){

     }
     var grand = new Geand();
     Father.prototype = grand;
     function Father(){
         this.name = '王五';
     }
     var father = new Father();
     Son.prototype = father;
     function Son(){
         this.hobbit = '赵六';
     }
     var son = new Son()

2.借用构造函数
缺点:
1.不能继承借用构造函数的原型
2.每次构造函数都要多走一个函数 (每次执行了两个方法)

    function Person(name,age,sex){
         this.name = name;
         this.age = age;
         this.sex = sex;
     }
     function Student(name,age,sex,grade){
         Person.call(this,name,age,sex);
         this.grade = grade;
     }
     var student = new Student();
    

3.共享原型
缺点:不能随便改动自己的原型

    Father.prototype.lastName = '张三';
    function Father(){

    }
    function Son(){

    }
    Son.prototype = Father.prototype;
    var son = new Son();
    var father = new Father();

4.圣杯模式

    Father.prototype.lastName = '张三';
    function Father(){

    }
    function Son(){

    }
    var inherit = (function(){
        var F = function(){};
        return function(Target,Origin){
            F.prototype = Origin.prototype;
            Target.prototype = new F();
            Target.prototype.constructor = Target;   //Target的constructor方法归位
            Target.prototype.uber = Origin.prototype;// 超类,真正继承的来源
        }

    }())
    inherit(Son,Father)
    var son = new Son();
    var father = new Father();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值