new
দিয়ে একটি ফাংশন কল করা সেই বস্তুর জন্য "কন্সট্রাক্টর" হিসাবে কল ফাংশন ব্যবহার করে একটি নতুন বস্তু তৈরি করে:
function MyFunction() {}
const myObject = new MyFunction();
typeof myObject;
> "object"`
এটি একটি "কন্সট্রাক্টর ফাংশন" একই কাঠামোগত প্যাটার্ন অনুসরণ করে এমন বস্তু তৈরির জন্য একটি টেমপ্লেট প্রদান করতে দেয়:
function MyFunction() {
this.myProperty = true;
}
const myObject = new MyFunction();
myObject.myProperty;
> true
একটি কনস্ট্রাক্টর ফাংশনের মধ্যে this
মানটি বোঝায় যে বস্তুটি তৈরি করা হচ্ছে, বস্তুটিকে সৃষ্টির সময় বৈশিষ্ট্য এবং পদ্ধতির সাথে পপুলেট করতে দেয়। এটি এমন বস্তু তৈরি করার অনুমতি দেয় যেগুলিতে ডেটা মান রয়েছে এবং সেই ডেটাতে একটি একক পোর্টেবল ইউনিট হিসাবে কাজ করার জন্য প্রয়োজনীয় যে কোনও পদ্ধতি রয়েছে, "এনক্যাপসুলেশন" নামে একটি ধারণা:
function MyFunction( myArgument ) {
this.myValue = myArgument;
this.doubleMyValue = () => myArgument * 2;
}
const myObject = new MyFunction( 10 );
myObject.myValue;
> 10
myObject.doubleMyValue();
> 20
this
একটি ফাংশনের বর্তমান এক্সিকিউশন প্রেক্ষাপটকে বোঝায়, যার অর্থ একটি কনস্ট্রাক্টর ফাংশন অন্য যেকোন ফাংশনের মতো this
মানের জন্য একই নিয়ম অনুসরণ করে। উদাহরণস্বরূপ, একটি কনস্ট্রাক্টর হিসাবে অভিপ্রেত একটি ফাংশন যখন স্বাধীনভাবে আহ্বান করা হয় তখন 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
জাভাস্ক্রিপ্টের বিল্ট-ইন ফ্যাক্টরি ফাংশন দ্বারা প্রতিষ্ঠিত নামকরণ প্যাটার্ন অনুসরণ করে কনস্ট্রাক্টর ফাংশনের শনাক্তকারীর প্রথম অক্ষরকে বড় করা প্রচলিত। যদিও আপনি কখনও কখনও পরিবর্তিতভাবে ব্যবহৃত পদগুলি দেখতে পারেন, কনস্ট্রাক্টর ফাংশন-ফাংশনগুলি যখন new
কীওয়ার্ড দিয়ে আমন্ত্রণ জানানো হয় তখন একটি নতুন-নির্মিত বস্তুর উপর কাজ করার উদ্দেশ্যে কাজ করে—"ফ্যাক্টরি ফাংশন" থেকে আলাদা যা সাধারণভাবে আহ্বান করা হলে স্পষ্টভাবে একটি বস্তু return
:
function myFunction( myArgument = false ) {
return { "myProperty" : myArgument };
}
const myObject = myFunction( true );
myObject;
> Object { myProperty: true }
যদিও অন্তর্নিহিত নীতিগুলি একই, কাস্টম কনস্ট্রাক্টর ফাংশনগুলির ব্যবহারের ক্ষেত্রেগুলি ES6 এ প্রবর্তিত আরও সম্পূর্ণ বৈশিষ্ট্যযুক্ত ক্লাস সিনট্যাক্স দ্বারা আরও ভালভাবে পরিবেশিত হয়।