Mida sa tead kirjeldajatest?
sobes.tech AI
Vastus AI-lt
JavaScripti deskriptorid on objektid, mis kirjeldavad erinevaid objekti omadusi, nagu selle väärtus (value), kirjutamisvõimalus (writable), loetavus (enumerable) ja konfigureeritavus (configurable). On olemas ka getterite ja setterite deskriptorid.
On kaks tüüpi deskriptorid:
-
Andmete deskriptorid: sisaldavad omaduse väärtust:
value: omaduse väärtus. Võib olla ükskõik milline kehtiv andmetüüp.writable: loogiline väärtus. Kuitrue, saab omaduse väärtust muuta (obj.prop = newValue). Kuifalse, ei saa.enumerable: loogiline väärtus. Kuitrue, on omadus nähtav objekti omaduste iteratsioonil (näiteksfor...intsüklis võiObject.keys()kasutamisel). Tavaliselt,false— lisamiselObject.definePropertyabil, jatrue— lisamisel tavalise omistamisega.configurable: loogiline väärtus. Kuitrue, saab deskriptorit muuta ja omadust kustutada. Tavaliselt,false— lisamiselObject.definePropertyabil (välja arvatudvalue), jatrue— lisamisel tavalise omistamisega. Kui määratud kuinon-configurable, ei saa seda tagasi muuta. Võite vähendadawritableväärtusttrue-ltfalse-le, kuid mitte vastupidi,non-configurablegetteri/setteri puhul.
-
Aksesori deskriptorid: määravad funktsioonid, mis kutsutakse välja, kui omadust loetakse (getter) või määratakse (setter):
get: funktsioon, mis kutsutakse välja, kui omadust loetakse. Selle funktsiooni tulemus muutub omaduse väärtuseks. Ei võta argumente.set: funktsioon, mis kutsutakse välja, kui omadusele kirjutatakse. Võtab ühe argumenti — uue väärtuse.enumerable: loogiline väärtus.configurable: loogiline väärtus.
Deskriptorid ei tohi segamini minna: omadusel peab olema kas value ja writable, või get ja set.
Deskriptorid kasutatakse objekti omaduste haldamiseks madalamal tasemel, kui tavaline omistamine, eriti kasutades meetodeid Object.defineProperty(), Object.defineProperties(), Object.getOwnPropertyDescriptor(), Object.getOwnPropertyDescriptors(), Object.create().
Näide, kuidas luua omadus andmedeskriptoriga:
// Loome tühja objekti
const obj = {};
// Määrame omaduse `name` andmedeskriptoriga
Object.defineProperty(obj, 'name', {
value: 'Alice',
writable: false, // omadust ei saa muuta
enumerable: true, // omadus on loetav
configurable: false // omaduse omadusi ei saa muuta ja omadust ei saa kustutada
});
console.log(obj.name); // Väljund: Alice
// Katse muuta omadust (tõenäoliselt ignoreeritakse või visatakse viga)
obj.name = 'Bob';
console.log(obj.name); // Väljund: Alice
// Katse kustutada omadus (tõenäoliselt ignoreeritakse või visatakse viga)
delete obj.name;
console.log(obj.name); // Väljund: Alice
Näide accessor deskriptoriga omaduse loomine:
// Loome objekti privaatsete muutujatega
const user = {
_firstName: 'John', // privaatne muutuja kokkuleppe järgi
_lastName: 'Doe'
};
// Määrame omaduse `fullName` accessor deskriptoriga
Object.defineProperty(user, 'fullName', {
get() {
// Getter: tagastab täisnime
return `${this._firstName} ${this._lastName}`;
},
set(value) {
// Setter: jagab täisnime osadeks ja uuendab privaatseid muutujaid
const parts = value.split(' ');
this._firstName = parts[0];
this._lastName = parts[1];
},
enumerable: true, // omadus on loetav
configurable: true // omaduse omadusi saab muuta, omadus saab olla kustutatud
});
console.log(user.fullName); // Väljund: John Doe
user.fullName = 'Peter Pan';
console.log(user._firstName); // Väljund: Peter
console.log(user._lastName); // Väljund: Pan
console.log(user.fullName); // Väljund: Peter Pan
Deskriptorite kasutamine võimaldab luua muutumatuid omadusi, hilinenud arvutamise omadusi, juurdepääsukontrolli omadusi (getterid/setterid) ja paindlikumalt juhtida objektide käitumist.