是否可以从继承的工厂方法中一般实例化 JS class 类型?
Is it possible to generically instantiate a JS class type from an inherited factory method?
所以我已经在谷歌上搜索了几个小时了,但我真的不能确定它是否可行。我不太了解 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);
}
}
背景是我得到了一些字节的网络流量,在解码之前必须检查一致性。 classes 还用于准备新的传出字节(有一个 toBytes
方法),这就是为什么在 fromBytes
中检查校验和一致性并在构造函数中检查逻辑一致性的原因。
我想要的是一个可继承的工厂方法,它将 return 各自的对象类型。调用 SpecificMessage.fromBytes
将 return 一个 Message
对象,因为它已明确命名。无论我是从 Message
还是 SpecificMessage
调用,我都想用 "knows" 的内容替换该对象创建。我在那个方向上的最佳猜测是 Object.create(this.prototype, {someInitLiteral})
,但我认为这不会调用构造函数?
另一件事是 Object.call(this, parameters)
,但我认为这也不正确。有没有办法从 "generic" 静态方法实例化当前 class?
最坏的情况我正在考虑只调用 super.fromBytes
并从包含的数据创建一个新的 SpecificMessage
。这将构造两个对象,但要通过所有检查。
感谢您的帮助。
您似乎已经意识到,this
keyword 将引用静态方法1 中的构造函数(= (sub)class) .所以你可以用 new
:
来调用它
class Message {
static fromBytes(bytes) {
someChecks();
return new this(processedBytes);
// ^^^^^^^^
}
constructor(someParameters) {
// …
}
}
1:只要在各自class上作为方法调用即可。您不能再轻松地将它传递给 as a callback.
所以我已经在谷歌上搜索了几个小时了,但我真的不能确定它是否可行。我不太了解 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);
}
}
背景是我得到了一些字节的网络流量,在解码之前必须检查一致性。 classes 还用于准备新的传出字节(有一个 toBytes
方法),这就是为什么在 fromBytes
中检查校验和一致性并在构造函数中检查逻辑一致性的原因。
我想要的是一个可继承的工厂方法,它将 return 各自的对象类型。调用 SpecificMessage.fromBytes
将 return 一个 Message
对象,因为它已明确命名。无论我是从 Message
还是 SpecificMessage
调用,我都想用 "knows" 的内容替换该对象创建。我在那个方向上的最佳猜测是 Object.create(this.prototype, {someInitLiteral})
,但我认为这不会调用构造函数?
另一件事是 Object.call(this, parameters)
,但我认为这也不正确。有没有办法从 "generic" 静态方法实例化当前 class?
最坏的情况我正在考虑只调用 super.fromBytes
并从包含的数据创建一个新的 SpecificMessage
。这将构造两个对象,但要通过所有检查。
感谢您的帮助。
您似乎已经意识到,this
keyword 将引用静态方法1 中的构造函数(= (sub)class) .所以你可以用 new
:
class Message {
static fromBytes(bytes) {
someChecks();
return new this(processedBytes);
// ^^^^^^^^
}
constructor(someParameters) {
// …
}
}
1:只要在各自class上作为方法调用即可。您不能再轻松地将它传递给 as a callback.