JavaScript/Objekte/Object/constructor

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Die Eigenschaft constructor von Object.prototype enthält eine Referenz auf den Konstruktor Object.


Syntax

Object.prototype.constructor


Attribute
Writable true
Enumerable false
Configurable true


Beschreibung[Bearbeiten]

Alle Objekte, die in der Eigenschaft prototype einer Funktion hinterlegt sind, besitzen eine Referenz auf das dazugehörige Funktionsobjekt, welche standardmäßig in der Eigenschaft constructor eines solchen prototypischen Objektes gespeichert ist. Über die Eigenschaft constructor von Object.prototype kann also der Konstruktor Object referenziert werden.


Beispiel
const constructor = Object.prototype.constructor;

console.log(constructor === Object); // true


Hier wird zunächst mit dem Wert der Eigenschaft constructor von Object.prototype eine Konstante initialisiert. Dieser Wert wird danach mit dem als globale Variable referenzierten Konstruktor Object verglichen und das Ergebnis in der Konsole ausgegeben. Dabei zeigt sich, dass die Eigenschaft constructor hier tatsächlich auf den Konstruktor Object verweist. Da die Eigenschaft constructor wie alle Eigenschaften und Methoden eines prototypischen Objektes an die vom jeweiligen Konstruktor erzeugten Instanzen vererbt wird, kann sie dem zur Folge auch direkt auf diesen Objekten angesprochen werden.


Beispiel
const object = { };

console.log(object.constructor.name); // Object


Wird also wie in diesem Beispiel ein planes Objekt erzeugt, dann erbt es von Object.prototype die Eigenschaft constructor, welche wie gesehen eine Referenz auf den Konstruktor Object enthält. Dieser wiederum besitzt wie alle Funktionsobjekte eine Eigenschaft name, welche einen String mit dem Namen der Funktion enthält, hier also die Zeichenkette Object. Dies ist entsprechend der Wert, der durch den Aufruf der Methode log in die Konsole geschrieben wird.

Gleichnamige Eigenschaften[Bearbeiten]

Wie eingangs erwähnt, besitzen alle prototypischen Objekte eine Eigenschaft mit dem Namen constructor, das heißt, die Eigenschaft von Object.prototype wird bei Instanzen anderer Konstruktoren innerhalb der Prototypenkette durch die gleichnamigen Eigenschaften verschattet, welche auf den prototypischen Objekten dieser Konstruktoren definiert sind. Wird die Eigenschaft constructor also auf einem Instanzobjekt angesprochen, bei dem es sich nicht um ein planes Objekt handelt, dann wird entsprechend der Konstruktor referenziert, dessen prototypisches Objekt innerhalb der jeweiligen Prototypenkette der Instanz am nächsten ist, und nicht der Konstruktor Object.


Beispiel
const number = new Number(42);

console.log(number instanceof Object); // true

console.log(number.constructor.name); // Number


In diesem Beispiel wird zunächst durch den Aufruf des Konstruktors Number ein Objekt erzeugt. Im Folgenden wird dann unter Verwendung des Operators instanceof geprüft, ob es sich bei dem Objekt um eine Instanz des Konstruktors Object handelt. Da grundsätzlich alle Objekte Instanzen dieses Konstruktors sind, sofern nicht ausdrücklich etwas anderes bestimmt wurde, wird als Ergebnis dieser Prüfung true in die Konsole geschrieben. Bei der abschließenden Ausgabe des Wertes der Eigenschaft constructor des Objektes wird jedoch der spezifischere Konstruktor Number referenziert und nicht der Konstruktor Object, da die Eigenschaft constructor von Object.prototype innerhalb der Prototypenkette des Objektes durch die gleichnamige Eigenschaft von Number.prototype verschattet wird.

Typbestimmung[Bearbeiten]

Da beim Zugriff auf die Eigenschaft constructor auf Instanzobjekten wie gesehen immer derjenige Konstruktor referenziert wird, dessen prototypisches Objekt in der jeweiligen Prototypenkette der Instanz am nächsten ist, kann die Eigenschaft dazu verwendet werden, den Typ eines Objektes zu bestimmen.


Beispiel
function getType (object) {
  return object.constructor.name;
}

console.log(getType([ ])); // Array

console.log(getType({ })); // Object


In diesem Beispiel wird eine Funktion mit dem Bezeichner getType deklariert, welche die Anweisung enthält, den Namen des über die Eigenschaft constructor referenzierten Konstruktors eines als Argument übergebenen Objektes zurückzugeben. Wird sie also zum Beispiel mit einem Arrayobjekt aufgerufen, dann wird über die Eigenschaft constructor der Konstruktor Array referenziert und eine entsprechende Zeichenkette zurückgegeben. Bei einem planen Objekt ist der Rückgabewert hingegen der String Object.

Weblinks[Bearbeiten]