代码之家  ›  专栏  ›  技术社区  ›  JLF

在Javascript ES6的子类中扩展父类方法

  •  7
  • JLF  · 技术社区  · 8 年前

    class Parent {
      constructor(elem) {
        this.elem = elem;
    
        elem.addEventListener((e) => {
          this.doSomething(e);
        });
      }
    
      doSomething(e) {
        console.log('doing something', e);
      }
    }
    
    class Child extends Parent {
      constructor(elem) {
        // sets up this.elem, event listener, and initial definition of doSomething
        super(elem)
      }
    
      doSomething(e) {
        // first does console.log('doing something', e);
        console.log('doing another something', e);
      }
    }
    

    1 回复  |  直到 8 年前
        1
  •  11
  •   Danil Speransky    8 年前

    super

    doSomething(e) {
      super.doSomething(e)
      console.log('doing another something', e)
    }
    

    this 在子类和父类中是同一件事,并且指的是实际的对象,所以如果你在父类的代码中调用一个方法,它将调用子类的实现,如果它确实是子类的话。这在其他语言中也适用,例如Python和Ruby。

    class Parent {
      constructor(elem) {
        this.elem = elem
        this.elem.addEventListener('click', (e) => { this.doSomething(e) })
      }
    
      doSomething(e) {
        alert('doing something')
      }
    }
    
    class Child extends Parent {
      constructor(elem) {
        super(elem)
      }
    
      doSomething(e) {
        super.doSomething(e)
        alert('doing another something')
      }
    }
    
    let child = new Child(document.getElementById('button'))
    <button id="button">Alert</button>