ดังนั้นฉันจึงค้นหาข้อมูลใน Google มาสองสามชั่วโมงแล้ว และฉันก็ตัดสินใจไม่ได้จริงๆ ว่าจะเป็นไปได้หรือไม่ ฉันไม่เข้าใจการสืบทอด 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
ใหม่จากข้อมูลที่มีอยู่ นั่นจะสร้างวัตถุสองชิ้น แต่ต้องผ่านการตรวจสอบทั้งหมด
ขอบคุณสำหรับความช่วยเหลือของคุณ