我正在从RequireJS转到browserify(与babelify一起),并尝试将当前模块重写为类。对于我的每个RequireJS模块,我都有一个名为的方法eventHandler
来处理所有模块特定的事件。现在,当我扩展一个类时,父类将调用子类的eventHandler
方法,这将导致两次调用该方法。
家长班:
'use strict';
class Tooltip {
constructor() {
this.eventHandler();
}
eventHandler() {
// Module specific events
}
}
module.exports = Tooltip;
子类:
'use strict';
import Tooltip from './Tooltip';
class Block extends Tooltip {
constructor() {
super();
this.eventHandler();
}
eventHandler() {
// Module specific events
// Gets called twice
}
}
module.exports = Block;
我喜欢在所有模块中将eventHandler方法命名为相同的事实,因为它易于维护。这就是为什么我想保持这种模式的原因。那么解决这个问题的最佳方法是什么?感谢您的任何建议!
因为您知道父构造函数调用this.eventHandler
,所以不要在派生类中这样做:
'use strict';
import Tooltip from './Tooltip';
class Block extends Tooltip {
constructor() {
super();
// (No call here)
}
eventHandler() {
// Module specific events
// Gets called twice
}
}
module.exports = Block;
发表您的评论:
父类并不总是实现eventHandler方法。因此,在这种情况下,我还需要确保它也被调用。
他们在哪里,不打电话。如果他们不这样做,请拨打电话。子类在本质上与超类紧密相关。
如果您可以假设(!)eventHandler
在super中的存在意味着它已经从其构造函数中调用了它,则可以执行以下操作:
constructor() {
super();
if (!super.eventHandler) {
this.eventHandler();
}
}
...但是同样,上级/下级关系的性质是,它之间的联系非常紧密,因此依靠您对上级是否执行此操作的了解是合理的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句