# ‘this’ কীওয়ার্ড  নিয়ে  বিস্তারিত

**‘this’** হচ্ছে জাভাস্ক্রিপ্টের সবচেয়ে কনফিউজিং এন্ড জটিল একটা কনসেপ্ট, ইন্টারমিডিয়েট লেভেলের ডেভেলপররাও **‘this’** এর ব্যবহার নিয়ে কনফিউশনে পড়ে যায়। তাই আজকে আমরা this নিয়ে যতরকম কনফিউশন আছে সব দূর করবো।

## ‘this’ **কি?**

‘this’ = মানে এই :-), this হচ্ছে জাভাস্ক্রীপ্টের একটা রিসার্ভড কীওয়ার্ড, জাভাস্ক্রিপ্টের বায় ডিফাল্ট রুল অনুযায়ী রিসার্ভড কীওয়াডর্কে ভ্যারিয়েবল বা ফাংশন হিসেবে ব্যবহার করতে পারবেন না।

**this কীওয়ার্ড কেন প্রয়োজন জাভাস্ক্রিপ্টে?**

this কীওয়ার্ড ব্যবহার করা হয় রিইউজাবিলিটি বাড়ানোর জন্য এবং this কীওয়ার্ড একটা ফাংশনকে different কনটেক্স এ ব্যবহার করতে সাহায্য করে।

this কীওয়ার্ডের ব্যবহারের ৪টি নিয়ম নিয়ে আজকে আলোচনা করবো, যা সমন্ধে ধারণা থাকলে, this কীওর্য়াডের ব্যবহার, কোন অবজেক্টকে ডিনোট করছে তা নিয়ে আর কোন হতাশা/কনফিউশন থাকবে না।

**রুলগুলো হলঃ**

১. implicit binding ( পরোক্ষভাবে)

২. explicit bing ( প্রত্যক্ষভাবে)

৩. new binding

৪. window binding

**১. implicit binding**

implicit biding এর রুল খুব সোজা, সবার আগে দেখবো কোন একটা ফাংশন কোথায় কল হয়েছে এবং দেখবো সেটার কোন ডট(.) নোটেশন আছে কিনা, সেটার ইমিডিয়েট left এ যেটা আছে সেটাই this কে ডিনোট করবে।

Example 1:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1672380582172/a095a69c-a625-4e2a-bc44-7efd54ed33c8.png align="center")

নিচের কনসোল লগ এ লক্ষ্য করুন [this.name](http://this.name) book object থেকে name প্রিন্ট করেছে অর্থাৎ this এখানে পরোক্ষভাবে book object কে denote করে কারন isReading function call হয়েছে book object এর ডট notation হিসেবে।

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1672380343121/4cb102ff-53de-436c-a6dc-d31ec6c9ba98.png align="center")

![]( align="center")

Example 2:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1672380775653/2fd21b9b-b6f3-40ee-887a-38e7d143fc43.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1672380797024/e004c2a1-03ba-454f-bcf1-cd724fab8eb4.png align="left")

**২. Explicit Binding**

বাইরের কোন কনটেক্সের ফাংশনকে ইনার কনটেক্স থেকে যদি কল করার প্রয়োজন হয় সেক্ষেত্রে explicit binding ব্যবহার করা হয়, explicit binding এর মাধ্যমে প্রত্যক্ষভাবে বলে দেওয়া যায় কোনটা অবজেক্ট হবে।

* call - second প্যারামিটার হিসেবে একটা একটা করে argument পাস করা যায়।
    
* apply - second প্যারামিটার এ আ্যারে কে argument হিসবে পাস করা যায়।
    
* bind - second প্যারামিটার হিসেবে একটা একটা করে argument পাস করা যায়।
    

Example 1. \[Call\]

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1672381222538/34a9002e-b40d-4bf4-93a8-38578ef68c40.png align="center")

এখানে call function দ্বারা প্রত্যক্ষভাবে this students object কে denote করবে বলে দেওয়া হয়েছে।

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1672381233868/fcfddb9a-19ed-4503-95f7-8228f05faad0.png align="left")

Example 2:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1672381298666/4526898c-501b-47fc-8cf0-c9414a91d20d.png align="left")

এখানে apply function দ্বারা প্রত্যক্ষভাবে this students object কে denote করবে বলে দেওয়া হয়েছে।

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1672381278705/b88216dc-adec-4ef7-ac4d-1e95db5d18e5.png align="center")

Example 3: \[Bind\]

bind ও call function এর মত একটা একটা করে প্যারামিটার নেয়, কিন্তু isPlaying ফাংশনকে ডিরেক্টলি কল না করে instance তৈরী করে।

**৩. new binding**

কনস্ট্রাক্টর ফাংশনকে যখন new কীওয়ার্ড দিয়ে কল করা হয় তখন ঐ instance এর জন্য কনস্ট্রাক্টর ফাংশনের মধ্যে নতুন অবজেক্ট তৈরী হয় সেটাই [this.name](http://this.name) সেট করে এবং ফাইনাল অবজেক্ট রির্টান করে।

নিচের উদাহরণটিতে খেয়াল করুন মনোযোগ দিয়ে,

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1672381947061/5bcb438c-3686-4582-9dc6-906161cd49b1.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1672381959327/b525dfb1-0207-456b-8ec7-17e71bdfdc26.png align="left")

**৪. window binding**

Global কনটেক্স এ থাকা কোন একটা ফাংশনকে কল করা হলে সেই ফাংশনের this কে কনসোল লগ করা হলে দেখতে পাবো এই Global window object কে ডিনোট করে, এটা জাভাস্ক্রীপ্টের বায় ডিফাল্ট বিহেবিওর।

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1672382021896/f61b0b94-9514-41da-ab94-41fbd1330505.png align="left")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1672382029821/948e5eea-5782-47fb-b9ed-73ab95246603.png align="left")

'use strict' ব্যবহার করে এই ডিফাল্ট বিহেবিওর কে আটকানো যায়।

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1672382052448/87b249a7-93f9-4101-ad00-b910acdf1110.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1672382059154/425208d1-af33-4f07-b670-51aa0420839c.png align="left")

এই চারটা নিয়ম মনে রাখলে কোড করার সময় this নিয়ে আর কোন কনফিউশন থাকবে না আশা করি।

পরবর্তী পোস্টগুলোতে শিখবো, <mark>filter(), map (), foreach (), spread operator , জাভাস্ক্রিপ্টের স্কোপ নিয়ে </mark> ।
