Kata kunci baru

Memanggil fungsi dengan new akan membuat objek baru menggunakan fungsi yang dipanggil sebagai "konstruktor" untuk objek tersebut:

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

typeof myObject;
> "object"`

Hal ini memungkinkan "fungsi konstruktor" menyediakan {i>template<i} untuk pembuatan objek yang mengikuti pola struktural yang sama:

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

myObject.myProperty;
> true

Nilai this dalam konstruktor merujuk pada objek yang dibuat, sehingga objek dapat diisi dengan properti dan metode pada saat pembuatan. Hal ini memungkinkan pembuatan objek yang berisi nilai data dan metode apa pun yang diperlukan untuk bertindak data tersebut sebagai unit portabel tunggal, sebuah konsep yang disebut "enkapsulasi":

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

myObject.myValue;
> 10

myObject.doubleMyValue();
> 20

this mengacu pada eksekusi saat ini konteks suatu fungsi, yang berarti bahwa fungsi konstruktor mengikuti aturan untuk nilai this seperti fungsi lainnya. Misalnya, sebuah fungsi yang dimaksudkan sebagai konstruktor menggunakan binding global untuk nilai this saat dipanggil secara independen:

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

Secara konvensional, karakter pertama dari ID fungsi konstruktor harus diawali dengan huruf besar, mengikuti pola penamaan yang ditetapkan oleh fungsi factory bawaan JavaScript. Meskipun terkadang Anda mungkin melihat istilah yang digunakan secara bergantian, fungsi konstruktor—fungsi yang dimaksudkan untuk bertindak pada objek yang baru dibuat saat dipanggil dengan kata kunci new—berbeda dengan "fungsi factory", yang secara eksplisit return objek saat dipanggil secara normal:

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

myObject;
> Object { myProperty: true }

Meskipun prinsip dasarnya sama, kasus penggunaan untuk kustom fungsi konstruktor lebih baik dilayani oleh fitur yang lebih lengkap Sintaksis Class diperkenalkan di ES6.