Итак, я гуглю это уже несколько часов и не могу решить, возможно это или нет. Я недостаточно хорошо понимаю наследование 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
из содержащихся данных. Это создаст два объекта, но пройдет все проверки.
Спасибо за вашу помощь.