【发布时间】:2021-12-25 05:41:52
【问题描述】:
我正在尝试使用库中的一个类,但想覆盖其中一个方法。这就是类的定义方式:
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')
}
}
但是,它仍在调用旧函数。我做错了什么?
【问题讨论】:
-
A的构造函数在B的构造函数之前调用,所以B在绑定之前没有机会覆盖submitHandler。您可以尝试删除this._searchForm上的事件处理程序并添加您自己的。 FWIW,this.submitHandler.bind(this)是不必要的,因为submitHandler是一个箭头函数。 -
您在 A 上的绑定提交处理程序,您不会在 B 上重新绑定。但如果您不想重新绑定,您也许可以这样做。 ->
addEventListener('submit', e -> this.submitHandler(e))
标签: javascript object oop bind