Wenn Sie eine Funktion mit new
aufrufen, wird ein neues Objekt erstellt, wobei die aufgerufene Funktion als „Konstruktor“ für dieses Objekt verwendet wird:
function MyFunction() {}
const myObject = new MyFunction();
typeof myObject;
> "object"`
Damit kann eine Konstruktorfunktion eine Vorlage für die Erstellung -Objekte, die dem gleichen Strukturmuster folgen:
function MyFunction() {
this.myProperty = true;
}
const myObject = new MyFunction();
myObject.myProperty;
> true
Der Wert von this
innerhalb eines Konstruktors
auf das erstellte Objekt verweist, sodass das Objekt mit Daten gefüllt werden kann.
mit Eigenschaften und Methoden. So können die
Erstellung von Objekten, die Datenwerte und Methoden enthalten, die für die Bearbeitung erforderlich sind
als einzelne tragbare Einheit, ein Konzept namens „Kapselung“:
function MyFunction( myArgument ) {
this.myValue = myArgument;
this.doubleMyValue = () => myArgument * 2;
}
const myObject = new MyFunction( 10 );
myObject.myValue;
> 10
myObject.doubleMyValue();
> 20
this
bezieht sich auf die aktuelle Ausführung
Kontext einer Funktion, d. h. eine Konstruktorfunktion folgt demselben
Regeln für den Wert von this
wie jede andere Funktion. So kann z. B. eine Funktion
als Konstruktor vorgesehene globale Bindung verwendet.
für den Wert von this
bei unabhängigem Aufruf:
function MyFunction() {
console.log( this );
}
const myObject = new MyFunction();
> MyFunction { }
MyFunction(); // Global `this` binding outside of strict mode is `globalThis`
> Window { … }
(function() {
"use strict";
function MyFunction() {
console.log( this );
}
MyFunction(); // Global `this` binding inside of strict mode is `undefined`
}());
> undefined
Das erste Zeichen des
und zwar entsprechend dem Benennungsmuster, das von der integrierten JavaScript-Funktion
Factory-Funktionen. Auch wenn die Begriffe manchmal synonym verwendet werden,
Konstruktorfunktionen – Funktionen, die auf ein neu erstelltes
mit dem Schlüsselwort new
aufgerufen, unterscheiden sich von "factory
Funktionen“ die explizit return
ein
-Objekt bei normalem Aufruf:
function myFunction( myArgument = false ) {
return { "myProperty" : myArgument };
}
const myObject = myFunction( true );
myObject;
> Object { myProperty: true }
Die Grundprinzipien sind zwar die gleichen, die Anwendungsfälle für benutzerdefinierte -Konstruktorfunktionen sind besser von den umfassenderen Funktionen In ES6 eingeführte Klassensyntax.