קריאה לפונקציה עם 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.