javascript - 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')
}
}
但是,它仍在调用旧函数。我究竟做错了什么?
解决方案
类构造函数不得调用(或在本例中为绑定)可覆盖方法(另请参见此处)。它甚至可能不应该安装事件侦听器——这不是构造函数的工作。但是如果你仍然想这样做,不要使用类字段而是方法声明:
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')
}
}
推荐阅读
- c++ - 实现一个类想要模拟 std::string 但是当 push_back 到一个向量时卡住了
- android - Flutter 应用程序无法运行。它给出了这种类型的错误
- c# - 如果父属性为空,WPF 嵌套属性绑定不起作用
- android - Android 动态功能模块依赖项
- javascript - “参考错误:
未定义”-javascript 模块 - c# - 将 null 传递给默认值为 null 的可选参数
- python - 从Django中的视图执行功能
- node.js - 在严格模式下使用 const(Node.js 和 Mongoose)
- r - 2 基于因子的计数表使用 dplyer 用于 r 中的独立列
- java - 如何在本地机器上访问 AWS 服务(使用 eclipse)?