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

Run | Jump | Roar The World
‘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:

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

Example 2:


২. Explicit Binding
বাইরের কোন কনটেক্সের ফাংশনকে ইনার কনটেক্স থেকে যদি কল করার প্রয়োজন হয় সেক্ষেত্রে explicit binding ব্যবহার করা হয়, explicit binding এর মাধ্যমে প্রত্যক্ষভাবে বলে দেওয়া যায় কোনটা অবজেক্ট হবে।
call - second প্যারামিটার হিসেবে একটা একটা করে argument পাস করা যায়।
apply - second প্যারামিটার এ আ্যারে কে argument হিসবে পাস করা যায়।
bind - second প্যারামিটার হিসেবে একটা একটা করে argument পাস করা যায়।
Example 1. [Call]

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

Example 2:

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

Example 3: [Bind]
bind ও call function এর মত একটা একটা করে প্যারামিটার নেয়, কিন্তু isPlaying ফাংশনকে ডিরেক্টলি কল না করে instance তৈরী করে।
৩. new binding
কনস্ট্রাক্টর ফাংশনকে যখন new কীওয়ার্ড দিয়ে কল করা হয় তখন ঐ instance এর জন্য কনস্ট্রাক্টর ফাংশনের মধ্যে নতুন অবজেক্ট তৈরী হয় সেটাই this.name সেট করে এবং ফাইনাল অবজেক্ট রির্টান করে।
নিচের উদাহরণটিতে খেয়াল করুন মনোযোগ দিয়ে,


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


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


এই চারটা নিয়ম মনে রাখলে কোড করার সময় this নিয়ে আর কোন কনফিউশন থাকবে না আশা করি।
পরবর্তী পোস্টগুলোতে শিখবো, filter(), map (), foreach (), spread operator , জাভাস্ক্রিপ্টের স্কোপ নিয়ে ।




