美文网首页
class继承

class继承

作者: YangJeremy | 来源:发表于2018-03-27 22:04 被阅读0次
    class ColorPoint extends Point {
      constructor(x, y, color) {
        super(x, y); // 调用父类的constructor(x, y)
        this.color = color;
      }
    
      toString() {
        return this.color + ' ' + super.toString(); // 调用父类的toString()
      }
    }
    
    

    子类必须在constructor方法中调用super方法,否则新建实例时会报错

    class Point { /* ... */ }
    
    class ColorPoint extends Point {
      constructor() {
      }
    }
    
    let cp = new ColorPoint(); // ReferenceError
    

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

    父类的静态方法,也会被子类继承

    class A {
      static hello() {
        console.log('hello world');
      }
    }
    
    class B extends A {
    }
    
    B.hello()  // hello world
    
    
    class A {}
    
    class B extends A {
      constructor() {
        super();
      }
    }
    
    

    super内部的this指向的是B

    class A {}
    
    class B extends A {
      m() {
        super(); // 报错
      }
    }
    
    
    

    相关文章

      网友评论

          本文标题:class继承

          本文链接:https://www.haomeiwen.com/subject/dakecftx.html