Nowe słowo kluczowe

Wywołanie funkcji za pomocą funkcji new powoduje utworzenie nowego obiektu za pomocą wywołanej funkcji jako czyli „konstruktora”. dla tego obiektu:

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

typeof myObject;
> "object"`

Dzięki temu „funkcja konstruktora” udostępnić szablon do tworzenia obiekty o tym samym wzorcu strukturalnym:

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

myObject.myProperty;
> true

Wartość this w konstruktorze funkcja odnosi się do tworzonego obiektu, umożliwiając wypełnienie obiektu z właściwościami i metodami w momencie tworzenia. Dzięki temu tworzenia obiektów zawierających wartości danych i wszystkich metod niezbędnych do te dane jako pojedynczą jednostkę przenośną, czyli pojęcie „enkapsulacja”:

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

myObject.myValue;
> 10

myObject.doubleMyValue();
> 20

this odnosi się do bieżącego wykonania kontekstu funkcji, co oznacza, że funkcja konstruktora działa tak samo dla wartości this tak jak w przypadku każdej innej funkcji. Na przykład funkcja jako konstruktor używa powiązania globalnego dla wartości this po wywołaniu niezależnie:

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

Zgodnie z konwencją pierwszy znak identyfikatora funkcji konstruktora jest zapisywany wielkimi literami zgodnie ze wzorcem nazw zastosowanym w domyślnych funkcjach fabrycznych w JavaScript. Choć terminy mogą być niekiedy używane zamiennie, funkcje konstruktora, czyli funkcje działające na nowo zbudowanym po wywołaniu ze słowem kluczowym new – różni się od „factory” funkcji”, co jednoznacznie return przy normalnym wywołaniu:

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

myObject;
> Object { myProperty: true }

Chociaż podstawy są takie same, w przypadku zastosowania funkcje konstruktora są lepiej obsługiwane przez pełniejsze funkcje Wprowadzono składnię klasy w ES6.