প্রোটোটাইপ
আমরা যখন কোন অবজেক্ট create করি সেগুলোর সাথে যে proparty এবং method ব্যাবহার করি সেখানে prototype নামে একটা লুকানো proparty থাকে যেটি মূলত একটি object. এটি javascript engine অটোমেটিকালি create করে দেয়।
prototype কীভাবে সেট করে, কীভাবে ব্যবহার করে এবং কেন ব্যবহার করে
ধরেন আপনি ফাংশন দিয়ে একটা অবজেক্ট তৈরি করবেন, ধরলাম object এর নাম Person.
var Person = function(fastName,lastName){
this.fastName = fastName ;
this.lastName=lastName;
};
এবং কয়েকটা অবজেক্ট বানাইলেন যথাঃ
person1= new Person("Shohedul","Emon");
console.log(person1);
person2= new Person("Ibrahim","Ridoy");
console.log(person2);
Person {fastName: "Shohedul", lastName: "Emon"}f
Person {fastName: "Ibrahim", lastName: "Ridoy"}
কয়েকটা বানানোর পর মনে হল যে কয়েকটা অবজেক্টের ক্ষেত্রে getAge() মেথড থাকা দরকার। এখন আপনি কী করবে? মূল ফাংশনে গিয়ে সেটা লিখবেন, এরপর অবজেক্টগুলোতে গিয়ে লিখবেন? এর চেয়ে যদি এমন হয়, prototype এর সাথে getAge method টা add করে দেয়া যাবে সেখান থেকে সবগুলা object (person1,prson2,etc..) এ getAge method access পাবে।
এক্ষেত্রে,
Person.prototype.getAge=function(age){return this.age=age}
এবার যদি আমরা আমাদের বানানো যেকোনো অবজেক্ট console.log করি,
যেমনঃ console.log(person1);
তাহলে দেখতে পাব আমাদের বানানো person1 object এর prototype এর সাথে getAge method add হয়ে গেছে।
এবার যদি object.getAge(); call করি তাহলে age টা দেখতে পাব।
person1.getAge(18);
ans:10
person2.getAge(20)
Ans 20
সুতরাং এখন অনেকগুলো object বানিয়ে object.getAge() call করলে age টা দেখতে পাব।যখন আমরা অনেকগুলি object বানাব প্রতিটি object এর সাথে অন্য কোন object এর লিঙ্ক prototype এর মাধ্যমে হয়।প্রটোটাইপেরও আরেকটা প্রটোটাইপ থাকতে পারে, একে প্রটোটাইপ চেইন বলে,
প্রটোটাইপের সুবিধা কী? ধরি, আমাদের এক হাজার অবজেক্ট আছে এবং মাত্র বিশটাতে getAge() মেথড দরকার, যদি আমি এক হাজারটাতে getAge() method লিখি তাহলে মেমরি কতটুকু খরচ হবে? এর চেয়ে যদি প্রটোটাইপে ব্যাবহার করি তাহলে দুই হাজার getAge() create হবে না, যখন ঐ বিশটাতে ব্যাবহার করব তখন শুধু সেই বিশটার জন্য create হবে।
(শহিদুল ইসলাম)
prototype কীভাবে সেট করে, কীভাবে ব্যবহার করে এবং কেন ব্যবহার করে
ধরেন আপনি ফাংশন দিয়ে একটা অবজেক্ট তৈরি করবেন, ধরলাম object এর নাম Person.
var Person = function(fastName,lastName){
this.fastName = fastName ;
this.lastName=lastName;
};
এবং কয়েকটা অবজেক্ট বানাইলেন যথাঃ
person1= new Person("Shohedul","Emon");
console.log(person1);
person2= new Person("Ibrahim","Ridoy");
console.log(person2);
Person {fastName: "Shohedul", lastName: "Emon"}f
Person {fastName: "Ibrahim", lastName: "Ridoy"}
কয়েকটা বানানোর পর মনে হল যে কয়েকটা অবজেক্টের ক্ষেত্রে getAge() মেথড থাকা দরকার। এখন আপনি কী করবে? মূল ফাংশনে গিয়ে সেটা লিখবেন, এরপর অবজেক্টগুলোতে গিয়ে লিখবেন? এর চেয়ে যদি এমন হয়, prototype এর সাথে getAge method টা add করে দেয়া যাবে সেখান থেকে সবগুলা object (person1,prson2,etc..) এ getAge method access পাবে।
এক্ষেত্রে,
Person.prototype.getAge=function(age){return this.age=age}
এবার যদি আমরা আমাদের বানানো যেকোনো অবজেক্ট console.log করি,
যেমনঃ console.log(person1);
তাহলে দেখতে পাব আমাদের বানানো person1 object এর prototype এর সাথে getAge method add হয়ে গেছে।
এবার যদি object.getAge(); call করি তাহলে age টা দেখতে পাব।
person1.getAge(18);
ans:10
person2.getAge(20)
Ans 20
সুতরাং এখন অনেকগুলো object বানিয়ে object.getAge() call করলে age টা দেখতে পাব।যখন আমরা অনেকগুলি object বানাব প্রতিটি object এর সাথে অন্য কোন object এর লিঙ্ক prototype এর মাধ্যমে হয়।প্রটোটাইপেরও আরেকটা প্রটোটাইপ থাকতে পারে, একে প্রটোটাইপ চেইন বলে,
প্রটোটাইপের সুবিধা কী? ধরি, আমাদের এক হাজার অবজেক্ট আছে এবং মাত্র বিশটাতে getAge() মেথড দরকার, যদি আমি এক হাজারটাতে getAge() method লিখি তাহলে মেমরি কতটুকু খরচ হবে? এর চেয়ে যদি প্রটোটাইপে ব্যাবহার করি তাহলে দুই হাজার getAge() create হবে না, যখন ঐ বিশটাতে ব্যাবহার করব তখন শুধু সেই বিশটার জন্য create হবে।
(শহিদুল ইসলাম)
No comments