⊗jsOpIhPPP 36 of 60 menu

Masalah Properti Privat dalam Pewarisan OOP di JavaScript

Fakta bahwa properti privat tidak diwariskan dapat menyebabkan masalah yang tidak terduga. Mari kita lihat contohnya. Misalkan kita memiliki kelas induk berikut dengan properti privat:

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

Misalkan di kelas turunan kita memutuskan untuk membuat metode yang akan menambah usia sebanyak satu. Namun, upaya untuk mengubah properti privat induk akan menyebabkan error:

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

Error akan hilang jika di kelas turunan kita mendeklarasikan properti privat #age:

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

Di sinilah jebakannya mengintai kita! Sebenarnya, kita menghasilkan dua properti privat: satu di induk dan satu di turunan. Dan keduanya bekerja sepenuhnya independen. Ini berarti bahwa metode induk akan mengubah propertinya sendiri, dan metode turunan - properti mereka sendiri.

Masalah ini sebenarnya memiliki solusi. Hanya perlu memanipulasi properti privat induk melalui metode induk itu sendiri. Mari kita tulis ulang kode kita sesuai dengan ini:

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

Dapat disederhanakan:

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

Dalam kode berikut, di kelas turunan metode induk ditimpa. Perbaiki masalah dalam kode ini:

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; } } }
Indonesia
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan cookie untuk operasi situs, analitik, dan personalisasi. Pemrosesan data dilakukan sesuai dengan Kebijakan Privasi.
terima semua atur tolak