Өвлөлт (Inheritance)
Өвлөлт гэдэг нь нэг class нөгөө class-ын шинж чанар, методуудыг өвлөж авах боломж юм. Жишээ нь "Амьтан" гэсэн ерөнхий class байвал "Нохой", "Муур" зэрэг тодорхой class-ууд түүнээс өвлөж болно — нийтлэг зүйлийг давтан бичих шаардлагагүй болно. Энэ нь кодыг хэмнэж, зохион байгуулалттай болгодог.
extends түлхүүр үг
extends ашиглан нэг class нөгөөгөөсөө өвлөнө. Өвлүүлэгч class-ыг parent (эцэг), өвлөн авагчийг child (хүү) гэнэ.
class Амьтан {
constructor(нэр) {
this.нэр = нэр;
}
амьсгалах() {
console.log(`${this.нэр} амьсгалж байна.`);
}
}
class Нохой extends Амьтан {
хуцах() {
console.log(`${this.нэр}: Хав хав!`);
}
}
const шарга = new Нохой("Шарга");
шарга.амьсгалах(); // Шарга амьсгалж байна. ← Амьтан-аас өвлөсөн
шарга.хуцах(); // Шарга: Хав хав! ← Нохой-н өөрийн метод
Нохой class нь Амьтан-ы амьсгалах() методыг шууд ашиглаж чадаж байна — давтан бичсэнгүй.
super() — эцэг class-ыг дуудах
Child class-д constructor бичихдээ super() заавал дуудах хэрэгтэй. super() нь parent class-ын constructor-ыг ажиллуулна.
class Амьтан {
constructor(нэр, нас) {
this.нэр = нэр;
this.нас = нас;
}
танилцуулах() {
console.log(`Нэр: ${this.нэр}, нас: ${this.нас}`);
}
}
class Муур extends Амьтан {
constructor(нэр, нас, өнгө) {
super(нэр, нас); // эхлээд Амьтан-ы constructor-ыг дуудна
this.өнгө = өнгө; // дараа нь өөрийн шинж нэмнэ
}
миаулах() {
console.log(`${this.өнгө} өнгийн ${this.нэр}: Мяу!`);
}
}
const цагаан = new Муур("Цагаан", 3, "цагаан");
цагаан.танилцуулах(); // Нэр: Цагаан, нас: 3
цагаан.миаулах(); // цагаан өнгийн Цагаан: Мяу!
Методыг дарж бичих (override)
Child class нь parent-ын методыг өөрийн хувилбараар солиж болно. Үүнийг method overriding гэнэ.
class Ажилтан {
constructor(нэр, цалин) {
this.нэр = нэр;
this.цалин = цалин;
}
мэдээлэл() {
console.log(`${this.нэр} — сарын ${this.цалин}₮`);
}
}
class Менежер extends Ажилтан {
constructor(нэр, цалин, баг) {
super(нэр, цалин);
this.баг = баг;
}
мэдээлэл() {
// parent методыг дарж өөрийнхөөрөө бичлээ
console.log(`${this.нэр} (Менежер) — ${this.баг} баг — ${this.цалин}₮`);
}
}
const болд = new Ажилтан("Болд", 2_000_000);
const сарнай = new Менежер("Сарнай", 4_000_000, "Frontend");
болд.мэдээлэл(); // Болд — сарын 2000000₮
сарнай.мэдээлэл(); // Сарнай (Менежер) — Frontend баг — 4000000₮
Дараагийн хичээлд:
Нууцлал (Encapsulation) — класс дотор өгөгдлийг хэрхэн хамгаалах, гаднаас хандахаас урьдчилан сэргийлэх талаар үзнэ.