Təsvirçilər haqqında nə bilirsiniz?
sobes.tech Süni İntellekt
AI-dan cavab
JavaScript-də təsvirlər obyektlərdir və müxtəlif obyekt xüsusiyyətlərini, məsələn, dəyərini (value), yazıla bilmə imkanını (writable), siyahıya alınma imkanını (enumerable) və konfiqurasiya imkanını (configurable) təsvir edir. Həmçinin, getter və setter-ləri olan təsvirlər mövcuddur.
İki növ təsvir mövcuddur:
-
Məlumat təsvirləri: Xüsusiyyətin dəyərini ehtiva edir.
value: Xüsusiyyətin dəyəri. Hər hansı keçərli məlumat tipi ola bilər.writable: Boolean. Əgərtrueisə, xüsusiyyətin dəyəri dəyişdirilə bilər (obj.prop = newValue). Standart olaraqfalseaccessor xüsusiyyətlər üçün vətrueməlumat xüsusiyyətləri üçün, adi təyin etmə ilə yaradılanlar üçün.enumerable: Boolean. Əgərtrueisə, xüsusiyyət obyektin xüsusiyyətləri arasında iterasiya zamanı görünəcək (məsələn,for...indövrü və yaObject.keys()ilə). Standart olaraqfalseObject.definePropertyilə əlavə olunan xüsusiyyətlər üçün vətrueadi təyin etmə ilə yaradılanlar üçün.configurable: Boolean. Əgərtrueisə, təsvirin xüsusiyyətləri (dəyər vəwritablexaric, dəyişdirildikdə accessor-ə çevrilənlər) dəyişdirilə bilər və xüsusiyyət silinə bilər. Standart olaraqfalseObject.definePropertyilə əlavə olunanlar üçün (dəyər xaric), vətrueadi təyin etmə ilə yaradılanlar üçün. Bir dəfə konfiqurasiya ediləndən sonra, dəyişdirilə bilməz.writable-ıtrue-dənfalse-a azalda bilərsiniz, ammagetter/setter-dənon-configurableolduqda, əksinə edilə bilməz.
-
Accessor təsvirləri: Xüsusiyyətin alınması (getter) və ya təyin edilməsi (setter) üçün funksiyaları təyin edir.
get: Xüsusiyyət oxunduqda çağırılan funksiya. Bu funksiyanın nəticəsi xüsusiyyətin dəyəri olur. Argument qəbul etmir.set: Xüsusiyyətə yazıldıqda çağırılan funksiya. Bir arqument qəbul edir — yeni təyin olunan dəyər.enumerable: Boolean (məlumat təsvirləri ilə eynidir).configurable: Boolean (məlumat təsvirləri ilə eynidir).
Təsvirləri qarışdırmaq olmaz: xüsusiyyət ya value və writable-a, ya da get və set-ə malikdir.
Təsvirlər obyektin xüsusiyyətlərini aşağı səviyyədə idarə etmək üçün istifadə olunur, xüsusən Object.defineProperty(), Object.defineProperties(), Object.getOwnPropertyDescriptor(), Object.getOwnPropertyDescriptors(), Object.create() metodları vasitəsilə.
Məlumat təsviri ilə xüsusiyyət yaratma nümunəsi:
// Boş obyekt yaradılır
const obj = {};
// `name` xüsusiyyətini məlumat təsviri ilə təyin edir
Object.defineProperty(obj, 'name', {
value: 'Alice',
writable: false, // Xüsusiyyət dəyişdirilə bilməz
enumerable: true, // Xüsusiyyət siyahıya alınacaq
configurable: false // Xüsusiyyətin xüsusiyyətləri dəyişdirilə bilməz, silinə bilməz
});
console.log(obj.name); // Çıxış: Alice
// Xüsusiyyəti dəyişdirməyə cəhd (strict rejimdə və ya səhv atacaq)
obj.name = 'Bob';
console.log(obj.name); // Çıxış: Alice
// Xüsusiyyəti silməyə cəhd (silmə mümkün deyil və ya səhv atacaq)
delete obj.name;
console.log(obj.name); // Çıxış: Alice
Accessor təsviri ilə xüsusiyyət yaratma nümunəsi:
// Özəl dəyişənlərlə obyekt yaradılır
const user = {
_firstName: 'John', // Konvensiya ilə özəl dəyişən
_lastName: 'Doe'
};
// `fullName` xüsusiyyətini accessor təsviri ilə təyin edir
Object.defineProperty(user, 'fullName', {
get() {
// Getter: tam adı qaytarır
return `${this._firstName} ${this._lastName}`;
},
set(value) {
// Setter: tam adı hissələrə bölür və özəl dəyişənləri yeniləyir
const parts = value.split(' ');
this._firstName = parts[0];
this._lastName = parts[1];
},
enumerable: true, // Siyahıya alınacaq
configurable: true // Xüsusiyyətin xüsusiyyətləri dəyişdirilə bilər, silinə bilər
});
console.log(user.fullName); // Çıxış: John Doe
user.fullName = 'Peter Pan';
console.log(user._firstName); // Çıxış: Peter
console.log(user._lastName); // Çıxış: Pan
console.log(user.fullName); // Çıxış: Peter Pan
Təsvirlərdən istifadə edərək dəyişməz xüsusiyyətlər, tələbinə görə hesablanan xüsusiyyətlər, girişə nəzarət edən xüsusiyyətlər (getter/setter) və obyektin davranışını daha elastik idarə etmək mümkündür.