JavaScript面向对象(2)

类的继承

- 使用extends进行继承

注意:JavaScript本身不提供“多重继承”功能,毕竟有诸多类似钻石问题的复杂情况,但开发者们还是通过其他方法实现多重继承,比如混入 

super关键字用于访问和调用对象父类上的函数,可以调用父类的构造函数,也可以调用父类的普通函数 

  1. constructor中,super必须在子类this的之前进行调用,即必须先调用父类的构造函数,再使用子类的构造函数
  2. super只能在派生类(子类)的构造函数和静态方法中使用

 错误写法

class Father {  
    constructor(x, y){
        this.x = x;
        this.y = y;
    }
    sum() {
        console.log(this.x + this.y);
    }
}
class Son extends Father {
    constructor(x, y) {
        this.x = x;            //会报错
        this.y = y;            //会报错
    }
}
var son = new Son(1, 2);  
son.sum();   //会报错
  • 类里面的语法中,只要符合类继承 + 子类有个构造函数(constructor)则一定要调用super,否则也会报错

    如果只需要继承到x、y的属性,自身不需要新的属性(类似于下方的id属性),则甚至可以不用写构造函数
  • 此时参数传递给子类的constructor的x和y,而父类的sum函数用的是父类的constructor的x和y

class Father {  
    constructor(x, y){
        this.x = x;
        this.y = y;
    }
    sum() {
        console.log(this.x + this.y);
    }
}
class Son extends Father {
    constructor(x, y, id) {
        //调用父类的构造函数
        super(x, y);   //并且一定要放在最开头,不能把this.id = id 放在它前面    
        this.id = id;
    }
}
var son = new Son(1, 2, 123);  
son.sum();   //success

 继承中属性或者方法的查找原则:就近原则

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值