首页 > 解决方案 > Javascript覆盖类方法

问题描述

我正在尝试使用库中的一个类,但想覆盖它的一种方法。这是类的定义方式:

class A {
  constructor (options) {
    this._searchForm = options.searchForm 
    this._searchForm.addEventListener('submit', this.submitHandler.bind(this))
  }

  submitHandler = (e) => {
    console.log('Default')
  }
}

我想覆盖该submitHandler功能,所以这就是我所做的:

class B extends A {
  submitHandler = (e) => {
    console.log('New')
  }
}

但是,它仍在调用旧函数。我究竟做错了什么?

标签: javascriptobjectoopbind

解决方案


类构造函数不得调用(或在本例中为绑定)可覆盖方法(另请参见此处)。它甚至可能不应该安装事件侦听器——这不是构造函数的工作。但是如果你仍然想这样做,不要使用类字段而是方法声明:

class A {
  constructor (options) {
    this._searchForm = options.searchForm 
    this._searchForm.addEventListener('submit', this.submitHandler.bind(this))
  }

  submitHandler(e) {
    console.log('Default')
  }
}
class B extends A {
  submitHandler(e) {
    console.log('New')
  }
}

推荐阅读