ES6基础之Class的继承

Class的继承
class可以通过extends关键字来实现继承

//父类
class Point{
    private x;
    private y;
    constructor(x,y){
        this.x=x;
        this.y=y;
    }
    toString(){
        return '('+this.x+','+this.y+')';
    }
}

//子类
class ColorPoint extends Point{
    private color;
    constructor(x, y, color) {
        super(x, y); // 调用父类的constructor(x, y)
        this.color = color;
    }
    toString() {
        return this.color + ' ' + super.toString(); // 调用父类的toString()
    }
}

上面代码中,子类的的方法中都出现了super关键字,它在这里表示父类的构造函数,用来新建父类的this对象。
注:子类必须在constructor中调用super方法,否则新建实例时会报错,这是因为子类没有自己的this 对象,而是继承父类的this对象,然后对其加工。如果不调用super方法,子类就得不到this对象。

ES5继承机制:先创造子类的实例对象this,然后将父类的方法添加到this上面(Parent.apply(this)。
ES6继承机制:实质是先创造父类的实例对象this(所以必须先调用super方法),然后再用子类的构造函数修改this。

在子类的构造函数中,只有调用了super之后,才可以使用this关键字,否则会报错。

class Color extends Point{
    constructor(x,y,color){
        this.color=color;//会报错
        super(x,y);
    }
}

只有super方法,才能返回父类实例。

类的prototype属性和_proto_属性

Class作为构造函数的语法糖,同时又prototype属性和_proto_属性,因此存在两条继承链。
一:子类的_proto_属性,表示构造函数的继承,总是指向父类。
二:子类prototype属性的_proto_属性,表示方法的继承,总是指向父类的prototype属性。

未完待续…..

本文参考ES6标准入门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值