Нууцлал (Encapsulation)
Encapsulation буюу нууцлал нь class-ын дотоод өгөгдлийг гаднаас шууд өөрчлөхөөс хамгаалах ойлголт юм. Бодит амьдралд автомашины хөдөлгүүрийг шууд гараараа тохируулдаггүй — жолооны хүрд, хурдасгуур зэрэг тусгайлан зориулсан хэрэглүүрээр удирддаг. Class-д мөн адил: өгөгдлийг шууд биш, зөвхөн тусгай методоор авах, өөрчлөх боломж олгоно.
Private fields — # тэмдэг
JavaScript-д # тэмдгийг нэрийн өмнө бичвэл тухайн property гаднаас харагдахгүй, хандах боломжгүй болно. Үүнийг private field гэнэ.
class Данс {
#үлдэгдэл = 0; // private — гаднаас шууд хандах боломжгүй
constructor(эзэмшигч) {
this.эзэмшигч = эзэмшигч;
}
мөнгө_оруулах(дүн) {
if (дүн > 0) {
this.#үлдэгдэл += дүн;
console.log(`+${дүн}₮ орлоо. Үлдэгдэл: ${this.#үлдэгдэл}₮`);
}
}
үлдэгдэл_харах() {
return this.#үлдэгдэл;
}
}
const данс = new Данс("Болд");
данс.мөнгө_оруулах(100_000);
// +100000₮ орлоо. Үлдэгдэл: 100000₮
console.log(данс.үлдэгдэл_харах()); // 100000
// console.log(данс.#үлдэгдэл); ← АЛДАА гарна — хандах боломжгүй
Getter ба Setter
get ба set түлхүүр үгс нь private өгөгдлийг аюулгүйгээр унших, бичих аргыг олгоно. Гаднаас харахад энгийн property мэт ажилладаг.
class Оюутан {
#оноо = 0;
constructor(нэр) {
this.нэр = нэр;
}
get оноо() {
return this.#оноо;
}
set оноо(утга) {
if (утга < 0 || утга > 100) {
console.log("Оноо 0–100 хооронд байх ёстой!");
return;
}
this.#оноо = утга;
}
}
const болд = new Оюутан("Болд");
болд.оноо = 85; // setter дуудагдана
console.log(болд.оноо); // getter дуудагдана → 85
болд.оноо = 150; // "Оноо 0–100 хооронд байх ёстой!"
console.log(болд.оноо); // 85 — өөрчлөгдсөнгүй
Яагаад нууцлал чухал вэ?
Нууцлал ашигласнаар:
class Нууц_үг {
#утга;
constructor(нууц_үг) {
this.#утга = нууц_үг;
}
шалгах(оруулсан) {
return this.#утга === оруулсан;
}
// #утга-г гаднаас хэзээ ч уншиж чадахгүй
}
const нууц = new Нууц_үг("mn@2025#secure");
console.log(нууц.шалгах("mn@2025#secure")); // true
console.log(нууц.шалгах("1234")); // false
// console.log(нууц.#утга) ← АЛДАА — нууц үг нь хамгаалагдсан байна
Буруу утга оруулахаас сэргийлж, өгөгдөл зөвхөн тодорхойлсон дүрмийн дагуу өөрчлөгдөнө. Том системд энэ нь аюулгүй байдлыг хангах гол хэрэгсэл болдог.
Дараагийн хичээлд:
ES6 модулиуд — import ба export ашиглан кодоо олон файлд хэрхэн хуваах, дахин ашиглах талаар үзнэ.