ES6 Classes
"Classes-ը բերեցին ավելի մաքուր և հասկանալի սինտաքս (syntactic sugar) նախատիպային ժառանգության վրա աշխատելու համար։"
Հիմնական Սինտաքսը
class-ը փոխարինում է ES5-ի կոնստրուկտոր
ֆունկցիաներին։ Այն թույլ է տալիս մեկ տեղում հայտարարել և՛
կոնստրուկտորը, և՛ մեթոդները։
class
Animal {// Կոնստրուկտորը կանչվում է new օպերատորի ժամանակ
constructor(name) {this.name =
name;}
// Մեթոդները ավտոմատ ավելացվում են Animal.prototype-ի մեջ
sayHi() {console.log(Բարև, ես -ն եմ:);}
}
let dog =
new
Animal("Բոբիկ");dog.sayHi(); // Բարև, ես Բոբիկ-ն եմ:
Ժառանգություն (Inheritance)
ES6-ում ժառանգությունը իրականացվում է extends բանալի
բառի միջոցով։
class Rabbit
extends
Animal {constructor(name, speed)
{// ՊԱՐՏԱԴԻՐ: Կանչում ենք ծնողի կոնստրուկտորը super()-ով
super(name);
this.speed =
speed;}
// Մեթոդի գերազանցում (Override)
sayHi() {super.sayHi(); // Կանչում ենք ծնողի մեթոդըconsole.log(Ես
վազում եմ կմ/ժ արագությամբ:);}
}
super() կանչը
Եթե ժառանգ կլասում գրում եք constructor, ապա
super()-ը կանչելը պարտադիր է, քանի դեռ չեք
օգտագործել this-ը։
Static, Private & Getters
Static Մեթոդներ
Պատկանում են հենց կլասին, այլ ոչ թե նրա օբյեկտներին։
static
compare(a, b) {return a.date -
b.date;}
Private Հատկություններ (#)
# սիմվոլը հատկությունը դարձնում է իսկապես փակ։
class Coffee {#waterLimit =
200;}
Getters & Setters
get name() {
return
this._name.toUpperCase(); }set name(v)
{ this._name = v; }
Multilevel & Hierarchical Inheritance
Բազմամակարդակ և մի քանի ճյուղերով ժառանգությունը թույլ է տալիս ստեղծել բարդ համակարգեր, որտեղ ընդհանուր հատկությունները բարձրանում են վերև, իսկ մասնավորները՝ իջնում ներքև։
🧬 Ժառանգության աստիճանակարգը (Class Hierarchy)
💻 Կիրառման օրինակ (ES6)
class
Animal {constructor(name) {
this.name = name; }eat() {
console.log(${this.name}-ը սնվում է...); }}
// Մակարդակ 2: Ճյուղավորում
class Dog
extends
Animal {bark() {
console.log(${this.name}-ը հաչում է: Վա՛ֆ-վա՛ֆ:); }}
// Մակարդակ 3: Մասնագիտացված կլաս (Shepherd)
class
Shepherd
extends
Dog {constructor(name, rank)
{super(name);
// Կանչում ենք Dog-ի կոնստրուկտորըthis.rank =
rank;}
guard() {
console.log(${this.name}-ը հսկում է տարածքը (Կարգավիճակ՝ ):); }}
Prototype Chain View
myDog → Shepherd.prototype →
Dog.prototype → Animal.prototype →
Object.prototype։
ES6 Class vs ES5 Prototype
1. ES6 Class Structure
2. Internal Prototype Chain
Hoisting & Strict Mode
- No Hoisting: Կլասը չի կարելի օգտագործել մինչև հայտարարելը։
- Strict Mode: Կլասի ներսի կոդը միշտ աշխատում է "use strict"-ով։
Enumerability
Կլասի մեջ սահմանված մեթոդները
enumerable: false են, ինչը նշանակում է՝ դրանք չեն
երևում for..in ցիկլի ժամանակ։