所以我已经搜索了几个小时,但我无法真正确定是否可行。我不太了解JS继承,因此找不到解决方案。我正在使用TypeScript,但是我认为这是一个JavaScript问题。平台是Node.js。
我的设置如下:
class Message {
static fromBytes(bytes) {
someChecks();
return new Message(processedBytes);
}
constructor(someParameters) {
someOtherChecks();
}
}
class SpecificMessage extends Message {
constructor(parameters) {
someSpecificChecks(parameters);
}
}
背景是我得到了一些字节的网络流量,并且在解码之前必须检查一致性。这些类还用于准备新的传出字节(有一个toBytes
方法),这就是为什么在fromBytes
中检查校验和一致性并在构造函数中检查逻辑一致性的原因。
我想拥有一个可继承的工厂方法,该方法将返回相应的对象类型。调用SpecificMessage.fromBytes
将返回一个Message
对象,因为它已被明确命名。我想用“知道”我是从Message
还是SpecificMessage
进行调用的对象来代替对象创建。我朝这个方向的最佳猜测是类似Object.create(this.prototype, {someInitLiteral})
的东西,但是我认为这不叫构造函数吗?
另一件事是Object.call(this, parameters)
,但我也不认为这是正确的。有没有办法从“通用”静态方法实例化当前类?
最坏的情况下,我正在考虑仅调用super.fromBytes
并根据所包含的数据创建一个新的SpecificMessage
。这样可以构造两个对象,但要经过所有检查。
感谢您的帮助。
答案 0 :(得分:2)
您似乎已经意识到,this
keyword将引用静态方法 1 中的构造函数(=(子)类)。所以,你可以叫以new
class Message {
static fromBytes(bytes) {
someChecks();
return new this(processedBytes);
// ^^^^^^^^
}
constructor(someParameters) {
// …
}
}
<子> 1:只要它被称为在相应的类中的方法。可以不再容易地穿过它围绕as a callback 子>