Javascript 面向对象(ES6继承)

2019-10-18  本文已影响0人  龚达耶

ES6的继承我们运用了class语法糖这样可以更像我们经典的面向对象语言。

我们用class创造的类其实还是一个构造方法

class ddw{
      constructor(x, y){
        this.x = x;
        this.y = y;
      }
      bart(){
        console.log(this.x+this.y)
      }
    }
    console.log(typeof ddw) // function
    console.log(Ddw.prototype.constructor === Ddw) // true

所有我们定义的方法都会被实例继承

class Ddw{
      constructor(x, y){
        this.x = x;
        this.y = y;
      }
      bart(){
        console.log(this.x+this.y)
      }
    }
    let gongxi = new Ddw(2,3)
    gongxi.bart() //5

但如果我们加了static就不行了

    class Ddw{
      constructor(x, y){
        this.x = x;
        this.y = y;
      }
      static bart(){
        console.log(this.x+this.y)
      }
    }
    let gongxi = new Ddw(2,3)
    gongxi.bart()
image.png
因为加了static表示只能通过类调用而不能通过实例继承

但是父类静态方法可以被子类继承

    class Ddw{
      constructor(x, y){
        this.x = x;
        this.y = y;
      }
      static bart(a, b){
        console.log(a+b)
      }
    }
    class Ddw2 extends Ddw {}
    Ddw2.bart(2,3) // 5

我们也可以用super调用父类

 class Ddw{
      constructor(x, y){
        this.x = x;
        this.y = y;
      }
      static bart(a, b){
        return a+b
      }
    }
    class Ddw2 extends Ddw {
      static bart2(a,b){
        console.log('answer is '+super.bart(a,b))
      }
    }
    Ddw2.bart2(2,3) //answer is 5

在子类中必须加入super()才能使用this,因为子类创建基于父类所以要super才能返回父类实例

是否继承可以用getPrototypeOf()判断

console.log(Object.getPrototypeOf(Ddw2) === Ddw) // true
上一篇下一篇

猜你喜欢

热点阅读