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

JLF*_*JLF 5 javascript oop inheritance ecmascript-6

我想扩展子类在父类中的特定方法的功能.我仍然习惯于ES6中的OOP,所以我不确定这是否可行或违反规则.

我正在寻找这样的东西:

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

本质上,我想在父方法上附加一个特定于子的回调.有没有一种创造性的方法来创建一个具有相同功能的全新类?

Dan*_*sky 7

您可以super在方法中使用:

doSomething(e) {
  super.doSomething(e)
  console.log('doing another something', e)
}
Run Code Online (Sandbox Code Playgroud)

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'))
Run Code Online (Sandbox Code Playgroud)
<button id="button">Alert</button>
Run Code Online (Sandbox Code Playgroud)