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.