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.