מילת המפתח החדשה

קריאה לפונקציה עם new יוצרת אובייקט חדש באמצעות הפונקציה שנקראה בתור את constructor עבור האובייקט:

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

typeof myObject;
> "object"`

הפעולה הזו מאפשרת 'פונקציית constructor' לספק תבנית ליצירה של של אובייקטים לפי אותו דפוס מבני:

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

myObject.myProperty;
> true

הערך של this בתוך פונקציית ה-constructor מתייחס לאובייקט שנוצר, ומאפשר לאכלס את האובייקט במאפיינים ובשיטות בזמן היצירה. כך אפשר ליצור אובייקטים שמכילים ערכים של נתונים ואת כל השיטות הנדרשות כדי לבצע פעולות על הנתונים האלה, כיחידה ניידת אחת. זהו המושג שנקרא 'אנקפסולציה':

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

myObject.myValue;
> 10

myObject.doubleMyValue();
> 20

this מתייחס להקשר הביצוע הנוכחי של פונקציה, כלומר פונקציית קונסטרוקטור פועלת לפי אותם כללים לגבי הערך של this כמו כל פונקציה אחרת. לדוגמה, פונקציה: המיועד בתור constructor משתמש בקישור גלובלי לערך של this כשמפעילים אותו בנפרד:

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

מקובל להשתמש באותיות רישיות בתו הראשון של הפונקציה לפי דפוס השמות, שמבוסס על במפעלים. למרות שלפעמים המונחים מוצגים לסירוגין, של ה-constructor – פונקציות שנועדו לפעול על מודל כאשר מפעילים אותו באמצעות מילת המפתח new — שונה מ'מפעל' פונקציות, שבאופן מפורש return כאשר מפעילים אותו כרגיל:

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

myObject;
> Object { myProperty: true }

למרות שהעקרונות הבסיסיים זהים, התרחישים לדוגמה של התאמה אישית מקבלים שירות טוב יותר באמצעות התחביר של Class נוסף ל-ES6.