⊗jsOpIhPPP 36 of 60 menu

ปัญหาของคุณสมบัติส่วนตัวในการสืบทอดใน OOP ใน JavaScript

ข้อเท็จจริงที่ว่าคุณสมบัติส่วนตัวไม่ถูกสืบทอด สามารถนำไปสู่ปัญหาที่ไม่คาดคิดได้ ลองดูตัวอย่างกัน สมมติว่าเรามีคลาสหลัก ที่มีคุณสมบัติส่วนตัวดังต่อไปนี้:

class User { #age; setAge(age) { this.#age = age; } getAge() { return this.#age; } }

สมมติว่าในคลาสลูกเราได้ตัดสินใจ สร้างเมธอดที่จะเพิ่ม อายุขึ้นหนึ่งปี อย่างไรก็ตาม ความพยายาม ในการเปลี่ยนคุณสมบัติส่วนตัวของคลาสหลัก จะทำให้เกิดข้อผิดพลาด:

class Student extends User { incAge() { this.#age++; // ข้อผิดพลาด } }

ข้อผิดพลาดจะหายไป หากในคลาสลูก ประกาศคุณสมบัติส่วนตัว #age:

class Student extends User { #age; incAge() { this.#age++; } }

นี่คือจุดที่กับดักรอเราอยู่! ในความเป็นจริง เราได้สร้าง คุณสมบัติส่วนตัวขึ้นมาสองอย่าง: หนึ่งอยู่ในคลาสหลัก และอีกหนึ่งอยู่ในคลาสลูก และพวกมันทำงาน แยกจากกันโดยสิ้นเชิง นี่หมายความว่า เมธอดของคลาสหลักจะเปลี่ยนแปลง คุณสมบัติของมันเอง ในขณะที่เมธอดของคลาสลูก - จะเปลี่ยนแปลงคุณสมบัติของมันเอง

ปัญหานี้ที่จริงแล้วมี วิธีแก้ไข แค่เพียงจัดการกับ คุณสมบัติส่วนตัวของคลาสหลัก ผ่านเมธอดของคลาสหลักนั้นเอง ลองเขียนโค้ดของเราใหม่ ให้สอดคล้องกับสิ่งนี้:

class Student extends User { incAge() { let age = this.getAge(); age++; this.setAge(age); } }

สามารถทำให้ง่ายขึ้นได้:

class Student extends User { incAge() { this.setAge(++this.getAge()); } }

ในโค้ดต่อไปนี้ในคลาสลูก ได้โอเวอร์ไรด์เมธอดของคลาสหลัก โปรดแก้ไขปัญหาที่มีอยู่ในโค้ดนี้:

class User { #name; setName(name) { this.#name = name; } getName() { return this.#name; } } class Employee extends User { setName(name) { if (name.length > 0) { this.#name = name; } } }
ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ