JavaScript/Objekte/Object/create

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Die eigene Methode create des Konstruktors Object erzeugt ein neues gewöhnliches Objekt. Der Prototyp des erzeugten Objektes ist der Wert, welcher der Methode beim Aufruf als erstes Argument übergeben wurde. Über den optionalen zweiten Parameter der Methode können Eigenschaften für das zu erzeugende Objekt definiert werden.


Syntax

Object.create(prototype[, properties])


Attribute
Writable true
Enumerable false
Configurable true


Beschreibung

Die Methode create erwartet bei ihrem Aufruf die Übergabe des Wertes, mit dem die interne Eigenschaft [[Prototype]] des zu erzeugenden Objektes initialisiert werden soll. Als Prototyp kann dabei entweder ein Objekt oder der primitive Wert null bestimmt werden. Wird ein Wert als Argument übergeben, der keinem dieser beiden Datentypen angehört, oder wird die Methode ohne Argumente aufgerufen, dann wird ein Typfehler geworfen.


Beispiel
const prototype = {
  key : 'value'
};

const object = Object.create(prototype);

console.log(object.key); // value


In diesem Beispiel wird zunächst in Literalschreibweise ein Objekt mit einer Eigenschaft erzeugt und einer Konstante als Wert zugewiesen. Danach wird die Methode create aufgerufen, wobei eine Referenz auf das zuvor erzeugte Objekt als Argument übergeben wird. Da der Wert der internen Eigenschaft [[Prototype]] des von create erzeugten Objektes das zuvor unter dem Namen prototype gespeicherte Objekt ist, erbt das neue Objekt die auf diesem Prototypen definierte Eigenschaft, was durch die abschließende Ausgabe in der Konsole bestätigt wird.


Beispiel
const object = Object.create(null);

object.key = 'value';

for (let property in object) {
  console.log(property); // key
}


Wird durch den Aufruf des Konstruktors Object oder durch die Notierung eines Objektliterals ein planes Objekt erzeugt, dann ist der Prototyp dieses Objektes standardmäßig Object.prototype, das heißt, es erbt zumindest die auf diesem Objekt definierten Methoden. Es ist allerdings in einigen Fällen erwünscht, dass ein Objekt keine Eigenschaften und Methoden über die Prototypenkette erbt, etwa bei der Verwendung des Objektes als assoziatives Array. In so einem Fall bietet es sich an, das Objekt mit der Methode create zu erzeugen und dabei als erstes Argument den Wert null zu übergeben. Auf diese Weise ist sichergestellt, dass zum Beispiel bei der Verwendung einer Schleife mit for und in wirklich nur die eigenen abzählbaren Eigenschaften des Objektes berücksichtigt werden.


Beispiel
const object = Object.create(null, {
  key : {
    value : 'value',
    configurable : true
  }
});

console.log(object.key); // value


Der optionale zweite Parameter der Methode create ermöglicht es, Eigenschaften und Methoden zu definieren, mit denen das erzeugte Objekt initialisiert werden soll. Dabei ist ein Objekt an create zu übergeben, dessen Schlüssel in das erzeugte Objekt übernommen werden. Als Wert der Eigenschaften ist ein sogenannter Property Descriptor anzugeben, also ein Objekt, dessen Eigenschaften die internen Attribute repräsentieren. Der eigentliche Eigenschaftswert ist dabei als Wert der Eigenschaft value des Descriptors zu notieren oder, wenn ein Accessor Property erzeugt werden soll, als Wert von get und oder set. Grundsätzlich gelten dabei die Regeln für die Definition von Eigenschaften, wie auch zum Beispiel bei der Methode defineProperty, sowie die entsprechenden Standardwerte, wenn keine expliziten Angaben gemacht werden. Wird innerhalb des Objektes, welches als zweites Argument an create übergeben wird, eine Eigenschaft notiert, deren Wert kein Objekt ist, dann erzeugt dies einen Typfehler.

Weblinks