JS的几种继承方式总结

1.什么是继承?

继承(英语:inheritance)是面向对象软件技术当中的一个概念。如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”,而把B称为“A的父类别”也可以称“B是A的超类”。继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。另外,为子类别追加新的属性和方法也是常见的做法。 一般静态的面向对象编程语言,继承属于静态的,意即在子类别的行为在编译期就已经决定,无法在执行期扩充。(维基百科)

2.为什么要继承?

代码重用

3.如何继承?

a.拷贝继承:顾名思义就是拷贝父类的方法与属性

function Person(name){//父类
        this.name=name;
    }
    Person.prototype.getName=function (){//父类方法
        console.log(this.name);
    }

    function Male(name,sex){
        Person.call(this,name);//调用父类构造函数 拷贝属性
        this.sex=sex;
    }
    extend(Person.prototype,Male.prototype);//拷贝父类方法

    Male.prototype.getSex=function (){//子类添加的方法
        console.log(this.sex);
    }

    function extend(obj1,obj2) {//将对象1的方法拷贝到对象2中
        for(var attr in obj1){
            obj2[attr]=obj1[attr];
        }
    }

    var P1=new Person();
    var M1=new Male();

通过Firebug可以看到

这里写图片描述
M1通过拷贝继承了Person的属性与方法,未使用原型链.

b.类式继承:利用构造函数继承的方式继承属性,原型链继承方法

function Person(name){//父类
        this.name=name;
    }
    Person.prototype.getName=function (){//父类方法
        console.log(this.name);
    }

    function Male(){
        Person.call(this,name);//调用父类构造函数 拷贝属性
    }
    Male.prototype=new Person();//通过原型链链接 继承方法
    Male.prototype.constructor=Male;//修正指向问题
    var P1=new Person();
    var M1=new Male();

通过Firebug可以看到
这里写图片描述
原型链

Person.prototype<------Person()=Male.prototype<------Male()

getName()                 name                        name

4.总结

我理解的JS的继承方式大致分两类,使用原型链和不使用原型链,然后如何使用原型链进行继承这里不做过多的讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值