Das neue Keyword

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.