เป็นไปได้ไหมที่จะสร้างอินสแตนซ์ประเภทคลาส JS โดยทั่วไปจากวิธีการจากโรงงานที่สืบทอดมา [ทำซ้ำ]

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

ขอบคุณสำหรับความช่วยเหลือของคุณ


person Randelung    schedule 30.01.2019    source แหล่งที่มา


คำตอบ (1)