JavaScript/Objekte/Propertydescriptor

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Die Eigenschaften eines JavaScript-Objekts sind nicht alle gleich. Sie können schreibgeschützt sein, sie können vor Aufzählungsfunktionen wie Object.keys() versteckt werden, und sie können statt eines Wertes Funktionen besitzen, die den Eigenschaftswert ermitteln.

Wie sich eine Objekteigenschaft verhält, definiert ihr Propertydescriptor. Dabei handelt es sich um ein Objekt mit 4 Eigenschaften, und es gibt sie in zwei Varianten: Datendeskriptoren und Accessor-Deskriptoren.

Wenn Sie einem Objekt einfach eine Eigenschaft zuweisen, ohne vorher einen Deskriptor gesetzt zu haben, entsteht ein Datendeskriptor, für den die Defaultwerte gesetzt sind.

Zum Arbeiten mit Propertydescriptoren dienen diese Methoden:

Gemeinsamkeiten

Beiden Deskriptortypen gemeinsam sind die Eigenschaften enumerable und configurable.

enumerable
Standardwert: true. Diese Eigenschaft kann auf false gesetzt werden, um die zugehörige Eigenschaft vor einigen Methoden, die die Eigenschaften eines Objekts durchlaufen können, zu verbergen. Dies sind
Die folgenden Methoden gelten dagegen als technische Methoden und listen auch die Eigenschaften, bei denen enumerable auf false gesetzt ist.
configurable
Standardwert: true. Diese Eigenschaft bildet eine Falltüre. Ist sie für ein Property einmal auf false gesetzt, lässt sich sein Propertydeskriptor nicht mehr ändern.

Datendeskriptoren

Eigenschaften mit Datendeskriptoren stellen einen einfachen Speicherplatz im Objekt dar. Datendeskriptoren verfügen über die zusätzlichen Eigenschaften

writable
Standardwert: true. Wird diese Eigenschaft auf false gesetzt, kann der Wert des Propertys nur noch gelesen werden. Achten Sie darauf, nicht versehentlich writeable zu verwenden. Beide Schreibweisen sind im Wörterbuch richtig, in JavaScript aber nur eine.
value
Standardwert: undefined. Diese Eigenschaft enthält den Wert des Propertys. Es handelt sich aber nicht um eine Live-Beziehung, der Wert in value wird lediglich beim Setzen des Propertydeskriptors in das Property übertragen und beim Lesen des Propertydeskriptors mit dem Wert des Propertys gefüllt.

Accessor-Deskriptoren

Ein Accessor-Deskriptor definiert eine Eigenschaft, bei denen der Zugriff auf den Wert über Funktionsaufrufe erfolgt. Diese Deskriptoren besitzen zwei zusätzlichen Eigenschaften, in denen die erforderlichen Funktionen hinterlegt werden. Solche Funktionen heißen accessor, daher die Bezeichnung für den Deskriptor.

get
Standardwert: undefined. Eine Funktion, die aufgerufen wird, wenn die Eigenschaft gelesen werden soll. Sie bekommt keine Parameter, und ihr Rückgabewert stellt den Wert der Eigenschaft dar.
set
Standardwert: undefined. Eine Funktion, die aufgerufen wird, wenn die Eigenschaft geschrieben werden soll. Sie erhält einen Parameter, der den zuzuweisenden Wert darstellt. Ihr Rückgabewert ist ohne Bedeutung.

Die Accessor-Funktionen werden wie Methoden des Objekts aufgerufen, zu dem der Propertydescriptor gehört. Das heißt: in this finden Sie beim Aufruf das Objekt vor, auf dem die Eigenschaft gelesen oder geschrieben werden soll.

Um ein Accessor-Deskriptor zu sein, muss ein Propertydeskriptor die get- oder set-Eigenschaft besitzen. Fehlen beide, ist er automatisch ein Datendeskriptor. Sobald der Deskriptor die get- oder set-Eigenschaft besitzt, dürfen die Eigenschaften writable oder value nicht mehr verwendet werden.

Ein Accessor-Deskriptor kann nur die get-Funktion enthalten und definiert damit eine readonly-Eigenschaft. Er kann auch nur die set-Funktion enthalten. Das ist ein eher exotisches Szenario, aber auch writeonly-Eigenschaften können eine Bedeutung haben.

ToDo (weitere ToDos)

Beispiele machen

Siehe auch