JavaScript各种继承

构造继承

使用call和apply方法,将父对象的构造函数绑定在子对象上

function Parents (){
    this.color = color ;
}
    function Children(name){
    this.name = name;
    Parents.apply(this,arguments);
    //这里的this用法是this的显示绑定
    //第一个传入的参数是对象直接绑定传入的对象
    //第二个是数组,它将作为参数传给Function(argument)
}

将父对象构造函数绑定在子对象上面

原型继承

每个对象都有原型,如果每个子类的原型都指向父类的示例
那子类就可以通过原型链 来使用父类的方法

Children.prototype = new Parents();
//此行之后Children.prototype.constructor 指向的 Parents
//本来是指向Children
Children.prototype.constructor = Children;

这样就可以使用啦

利用空对象继承

var temp = function(){};
temp.prototype = Parents.prototype;
Children.prototype = new temp();
Children.prototype.constructor = Children;

这样解决了直接将父子对象原型联系起来造成子对象更改引起的父对象属性也更改的副作用!

复制继承

直接把父类的不变属性都放在 prototype上 然后让子对象的原型去复制父元素的原型属性

function Parents(){
    Parents.prototype.item = "human";
}
function Children(){
    var p = Parents.prototype;
    var c = Chlidren.prototype;
    for(let i in p ){
        c[i] = p[i];
    }
}
prototype和apply、call比较简单 大多用构造函数和原型混合的方式
    function Parents(){
        this.name = "baba_mama";
    }
    function Children(){
        this.age = 3;
    }
    Children.prototype = new Parents();
    //省略了子类原型的构造器书写

ES6的extends

和java语言的extends很类似 需要定义父类 然后子类去继承
父类中的所有方法都是默认添加到子类的原型上 - -
原理也是原型
class P{
    constructor(name,age){
        this.name = name ;
        this.age = age ;
    }
    getAge(){
        return this.age;
    }
}
class C extends P{
    constructor(name,age){
        super(name,age);
        this.gender = "one";
    }
}

super:既可以当做函数也可以当做对象。super可以作为父类的构造函数。子类只能在构造函数里面来调用super方法
作为对象的时候 super = Parent.prototype

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值