⊗jsOpIhPPP 36 of 60 menu

Vấn đề thuộc tính private khi kế thừa trong OOP JavaScript

Việc các thuộc tính private không được kế thừa có thể dẫn đến một vấn đề bất ngờ. Hãy xem xét ví dụ sau. Giả sử chúng ta có một lớp cha với một thuộc tính private:

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

Giả sử trong lớp con, chúng ta quyết định tạo một phương thức để tăng tuổi lên một. Tuy nhiên, nỗ lực thay đổi thuộc tính private của lớp cha sẽ dẫn đến lỗi:

class Student extends User { incAge() { this.#age++; // lỗi } }

Lỗi sẽ biến mất nếu trong lớp con khai báo thuộc tính private #age:

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

Đây chính là cái bẫy đang chờ chúng ta! Trên thực tế, chúng ta đã tạo ra hai thuộc tính private: một ở lớp cha và một ở lớp con. Và chúng hoạt động hoàn toàn độc lập. Điều này có nghĩa là các phương thức của lớp cha sẽ thay đổi thuộc tính của riêng nó, còn các phương thức của lớp con - thuộc tính của riêng chúng.

Vấn đề này thực ra có cách giải quyết. Chỉ cần thao tác với thuộc tính private của lớp cha thông qua các phương thức của chính lớp cha đó. Hãy viết lại mã của chúng ta theo cách này:

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

Có thể đơn giản hóa:

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

Trong mã sau, lớp con ghi đè phương thức của lớp cha. Hãy sửa các vấn đề trong mã này:

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; } } }
Tiếng Việt
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ʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối