Ինչ գիտես նկարագրիչների մասին?
sobes.tech AI
Պատասխան AI-ից
Դեսքրիպտորները JavaScript-ում՝ դա օբյեկտներ են, որոնք նկարագրում են օբյեկտի տարբեր հատկություններ, ինչպիսիք են նրա արժեքը (value), գրելու հնարավորությունը (writable), ցուցակագրման հնարավորությունը (enumerable) և կոնֆիգուրացիայի հնարավորությունը (configurable): Կան նաև getter և setter դեսքրիպտորներ:
Կան երկու տեսակի դեսքրիպտորներ:
-
Տվյալների դեսքրիպտորներ: պարունակում են հատկության արժեքը:
value: հատկության արժեքը: կարող է լինել ցանկացած վավեր տվյալների տիպ:writable: տրամաբանական արժեք: եթեtrue, ապա հատկության արժեքը կարող է փոխվել (obj.prop = newValue): Դեպքերում, երբfalse, արժեքը չի կարող փոխվել:enumerable: տրամաբանական արժեք: եթեtrue, ապա հատկությունը կհայտնվի օբյեկտի հատկությունների վրա անցնելու ժամանակ (օրինակ,for...inցիկլում կամObject.keys()-ի միջոցով):configurable: տրամաբանական արժեք: եթեtrue, ապա դեսքրիպտորի հատկությունները կարող են փոխվել և հատկությունը կարող է հեռացվել:
-
Աքսեսոր դեսքրիպտորներ: որոշում են ֆունկցիաներ, որոնք կկոչվեն, երբ ստացվում է կամ սահմանվում է հատկության արժեքը:
get: ֆունկցիա, որը կկոչվի, երբ կարդացվում է հատկությունը:set: ֆունկցիա, որը կկոչվի, երբ սահմանվում է հատկության արժեքը:enumerable: տրամաբանական արժեք:configurable: տրամաբանական արժեք:
Դեսքրիպտորները չեն կարող խառնել՝ հատկությունը կամ value և writable ունի, կամ get և set:
Դեսքրիպտորները օգտագործվում են օբյեկտի հատկությունները ավելի ցածր մակարդակով կառավարելու համար, քան սովորական նշանակումը, մասնավորապես Object.defineProperty(), Object.defineProperties(), Object.getOwnPropertyDescriptor(), Object.getOwnPropertyDescriptors(), Object.create() մեթոդների միջոցով:
Օրինակ՝ տվյալների դեսքրիպտորով հատկություն ստեղծելու համար:
// Ստեղծում ենք դատարկ օբյեկտ
const obj = {};
// Դիտարկում ենք հատկություն `name` տվյալների դեսքրիպտորով
Object.defineProperty(obj, 'name', {
value: 'Alice',
writable: false, // հատկությունը չի կարող փոխվել
enumerable: true, // հատկությունը ցուցադրվող կլինի
configurable: false // հատկության հատկանիշները չի կարելի փոխել, հատկությունը չի կարելի հեռացնել
});
console.log(obj.name); // Կցուցադրվի: Alice
// Փորձում ենք փոխել հատկությունը (կգործի միայն խիստ ռեժիմում կամ սխալ կհայտնվի)
obj.name = 'Bob';
console.log(obj.name); // Կցուցադրվի: Alice
// Փորձում ենք հեռացնել հատկությունը (կգործի կամ սխալ կհայտնվի)
delete obj.name;
console.log(obj.name); // Կցուցադրվի: Alice
Օրինակ՝ accessor դեսքրիպտորով հատկություն ստեղծելու համար:
// Ստեղծում ենք օբյեկտ՝ մասնավոր փոփոխականներով
const user = {
_firstName: 'John', // մասնավոր փոփոխական համաձայնեցմամբ
_lastName: 'Doe'
};
// Դիտարկում ենք հատկություն `fullName` accessor դեսքրիպտորով
Object.defineProperty(user, 'fullName', {
get() {
// getter: վերադարձնում է լրիվ անունը
return `${this._firstName} ${this._lastName}`;
},
set(value) {
// setter: բաժանում է լրիվ անունը մասերի և թարմացնում մասնավոր փոփոխականները
const parts = value.split(' ');
this._firstName = parts[0];
this._lastName = parts[1];
},
enumerable: true, // հատկությունը ցուցադրվող կլինի
configurable: true // հատկանիշները կարելի է փոխել, հատկությունը կարելի է հեռացնել
});
console.log(user.fullName); // Կցուցադրվի: John Doe
user.fullName = 'Peter Pan';
console.log(user._firstName); // Կցուցադրվի: Peter
console.log(user._lastName); // Կցուցադրվի: Pan
console.log(user.fullName); // Կցուցադրվի: Peter Pan
Դեսքրիպտորների օգտագործումը թույլ է տալիս ստեղծել անփոփոխ հատկություններ, մոռացության հատկություններ, մուտքի վերահսկման հատկություններ (getter-ներ/setter-ներ) և ավելի ճկուն կառավարել օբյեկտների վարքը։