Das neue Keyword

Beim Aufrufen einer Funktion mit new wird ein neues Objekt erstellt. Dabei wird die aufgerufene Funktion als „Konstruktor“ für das Objekt verwendet:

function MyFunction() {}
const myObject = new MyFunction();

typeof myObject;
> "object"`

So kann eine „Konstruktorfunktion“ eine Vorlage für die Erstellung von Objekten bereitstellen, die dem gleichen Strukturmuster folgen:

function MyFunction() {
  this.myProperty = true;
}
const myObject = new MyFunction();

myObject.myProperty;
> true

Der Wert von this in einer Konstruktorfunktion bezieht sich auf das erstellte Objekt. Das Objekt kann dann bei der Erstellung mit Attributen und Methoden gefüllt werden. Dies ermöglicht die Erstellung von Objekten, die Datenwerte und alle erforderlichen Methoden enthalten, um diese Daten als eine einzelne portable Einheit zu verarbeiten. Dies wird als "Kapselung" bezeichnet:

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 den aktuellen Ausführungskontext einer Funktion. Das bedeutet, dass eine Konstruktorfunktion denselben Regeln für den Wert von this wie jede andere Funktion folgt. Beispielsweise verwendet eine als Konstruktor vorgesehene Funktion die globale Bindung für den Wert von this, wenn sie unabhängig aufgerufen wird:

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

Es ist konventionell, das erste Zeichen der ID einer Konstruktorfunktion großzuschreiben, wie in den integrierten werksfunktionen von JavaScript festgelegt. Die Begriffe werden manchmal synonym verwendet. Konstruktorfunktionen – Funktionen, die für ein neu erstelltes Objekt bestimmt sind, wenn sie mit dem Keyword new aufgerufen werden – unterscheiden sich von „Fabrikfunktionen“, die bei normalem Aufruf explizit return ein Objekt enthalten:

function myFunction( myArgument = false ) {
  return { "myProperty" : myArgument };
}
const myObject = myFunction( true );

myObject;
> Object { myProperty: true }

Obwohl die Grundprinzipien die gleichen sind, eignen sich die Anwendungsfälle für benutzerdefinierte Konstruktorfunktionen besser durch die umfassendere Class-Syntax, die in ES6 eingeführt wurde.