javascript - 什么是正确的继承方式是带有初始化方法的JS
问题描述
我有这样的代码。它像我期望的那样工作。
class colorObj {
constructor() {
this.color = new Color();
}
init() {
this.color.setColor(
calcColor() // Could be long
);
}
}
class sizeObj extends colorObj {
constructor() {
super();
this.size = new Size();
}
init() {
super.init();
this.size.setSize('10x10');
}
}
let obj = new sizeObj();
obj.init(); // (1)
obj.color.setColor('green');
obj.init();
但现在我想删除第一个init()
电话(1)。而且我不明白如何在类层次结构中调用它。我不能打电话this.init()
,colorObj
因为new Size();
还没有完成。主要思想是将构造函数中的对象分配与init()
方法中的初始化分开。我也想有机会在任何有init()
电话的地方“重置”对象。没有新的对象分配。
我可以用这样的代码做到这一点:
class sizeObj extends colorObj {
constructor() {
super();
this.size = new Size();
sizeObj.prototype.init.call(this, false);
}
init(initializeSuper = true) {
if ( initializeSuper ) {
super.init();
}
this.size.setSize('10x10');
}
}
有用。但我希望找到不那么糟糕的解决方案。
我也可以这样做:
class sizeObj extends colorObj {
constructor() {
super();
this.size = new Size();
this.initSizeObj();
}
init() {
super.init();
this.initSizeObj();
}
initSizeObj() {
this.size.setSize('10x10');
}
}
但这对我来说也是纠结的解决方案。
谢谢 :)
解决方案
推荐阅读
- python - 计算列表 2 中列表 1 中的项目的次数
- angular - 如何使用angularFire从firebase数据库中检索用户列表并且没有“密钥”?
- java - ConstraintLayout 以编程方式设置 constraintHeight_default
- file - 读取 Haskell 中的值和列表列表
- c# - If (Integer Console.Readline "" or null) 不起作用
- upgrade - 升级到 SugarCRM ver 8.0.0 Pro 后无法登录
- html - Angular Sticky Header 重叠内容
- python - 嵌入pytorch
- angular - 仅清除单个输入字段 angular6 模板驱动表单
- excel - Excel - 在 sumif 中用间接代替动态列名