La nuova parola chiave

Chiamare una funzione con new crea un nuovo oggetto utilizzando la funzione chiamata come il "costruttore" per quell'oggetto:

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

typeof myObject;
> "object"`

Questo consente a una "funzione costruttore" fornire un modello per la creazione che seguono lo stesso modello strutturale:

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

myObject.myProperty;
> true

Il valore di this all'interno di una funzione di costruttore si riferisce all'oggetto in fase di creazione, consentendo di compilarlo con proprietà e metodi al momento della creazione. Ciò consente di creare oggetti contenenti valori di dati e tutti i metodi necessari per intervenire su questi dati come un'unica unità portatile, un concetto chiamato "incapsulamento":

function MyFunction( myArgument ) {
    this.myValue = myArgument;
    this.doubleMyValue = () => myArgument * 2;
}
const myObject = new MyFunction( 10 );

myObject.myValue;
> 10

myObject.doubleMyValue();
> 20

this si riferisce all'esecuzione attuale contesto di una funzione, nel senso che una funzione costruttore segue lo stesso per il valore di this come qualsiasi altra funzione. Ad esempio, una funzione inteso come costruttore utilizza un'associazione globale per il valore di this se richiamato in modo indipendente:

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

È convenzionale usare le maiuscole del primo carattere di una funzione costruttore , seguendo lo schema di denominazione stabilito dalla tecnologia JavaScript integrata funzioni di fabbrica. Anche se a volte i termini possono essere utilizzati in modo intercambiabile, funzioni costruttore: funzioni destinate ad agire su un modello quando viene richiamato con la parola chiave new, si differenzia da "factory", ", che esplicitamente return quando viene richiamato normalmente:

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

myObject;
> Object { myProperty: true }

Sebbene i principi di base siano gli stessi, i casi d'uso per le funzioni costruttore sono gestite meglio dalle funzioni Sintassi della classe Class introdotta in ES6.