জাভাস্ক্রিপ্টে, প্রতিটি অবজেক্ট এর প্রোটোটাইপ নামে একটি প্রপার্টি থাকে। প্রোটোটাইপ প্রপার্টি নিজেই একটি অবজেক্ট যা থেকে মূল অবজেক্ট এর বৈশিষ্ট্য এবং এই পদ্ধতির উত্তরাধিকারী হয়। এই প্রক্রিয়াটি প্রোটোটাইপ-ভিত্তিক উত্তরাধিকার হিসাবে পরিচিত।
যখন আমরা কোনো অবজেক্ট এর কোনো প্রপার্টি বা পদ্ধতি অ্যাক্সেস করি, জাভাস্ক্রিপ্ট প্রথমে অবজেক্ট এর নিজস্ব প্রপ্রতি দেখে। যদি এটি সেখানে প্রপার্টি খুঁজে না পায়, তকন এটি অবজেক্ট এর প্রোটোটাইপ দেখে এবং তারপর প্রোটোটাইপের প্রোটোটাইপ, এবং এভাবেই, প্রোটোটাইপ চেইন শেষ না হওয়া পর্যন্ত।
প্রোটোটাইপ চেইনের শীর্ষে রয়েছে Object.prototype, জাভাস্ক্রিপ্টের সমস্ত অবজেক্ট সহ যেগুলি {} বা নতুন Object() দিয়ে তৈরি করা হয়েছে, Object.prototype থেকে তা উত্তরাধিকারসূত্রে প্রাপ্ত। এই পদ্ধতি যেমন toString, hasOwnProperty এবং valueOf থেকে এসেছে।
২ ভাবে প্রোটোটাইপ বাবয়ার করে অবজেক্ট তৈরি করা যায়, তা অল নিম্মরুপ -
অবজেক্ট লিটারাল ব্যবহার করে প্রোটোটাইপ তৈরি করা দেকুন।
const person = { name: 'John', greet: function() { console.log(`Hello, my name is ${this.name}`); } }; person.greet(); // Output: Hello, my name is John
বাঁকা
এই উদাহরণে, ব্যক্তি একটি অবজেক্ট লিটারাল। এর একটি পদ্ধতি আছে যা অল greet, এটি Object.prototype থেকেই এসেছে।
কনস্ট্রাক্টর ফাংশন অল অবজেক্ট তৈরি করার অন্য আরেকটি উপায়। এগুলো নতুন উদাহরণের জন্য প্রোটোটাইপ নির্দেশ করার একটি পদ্দতি প্রদান করে।
নিচে কনস্ট্রাক্টর ফাংশন ব্যবহার করে প্রোটোটাইপ তৈরি করার একটি উদাওরন দেকুন।
function Person(name) { this.name = name; } Person.prototype.greet = function() { console.log(`Hello, my name is ${this.name}`); }; const person1 = new Person('Alice'); const person2 = new Person('Bob'); person1.greet(); // Output: Hello, my name is Alice person2.greet(); // Output: Hello, my name is Bob
বাঁকা
এই উদাওরনে Person অল একটি কনস্ট্রাক্টর ফাংশন। Person.prototype অল জেকানে আমরা পদ্মটি নির্দেশ করি সকল Person এর ।
প্রোটোটাইপ তার পরবর্তী অরতাত উত্তরাধিকার কে অনুমতি দেয়। একটি অবজেক্ট অন্যান্য অবজেক্ট থেকে বৈশিষ্ট্য এবং পদ্ধতি উত্তরাধিকারসূত্রে প্রাপ্ত হতে পারে।
নিচে প্রোটোটাইপ এবং তার উত্তরাধিকারসূত্রে প্রাপ্ত বৈশিষ্ট এর একটি উদাওরন দেকুন।
function Animal(name) { this.name = name; } Animal.prototype.speak = function() { console.log(`${this.name} makes a noise.`); }; function Dog(name) { Animal.call(this, name); // Call the parent constructor } Dog.prototype = Object.create(Animal.prototype); // Set up inheritance Dog.prototype.constructor = Dog; // Fix the constructor property Dog.prototype.bark = function() { console.log(`${this.name} barks.`); }; const dog = new Dog('Rex'); dog.speak(); // Output: Rex makes a noise. dog.bark(); // Output: Rex barks.
বাঁকা
এই উদাওরনে Dog উত্তরাধিকারসূত্রে Animal তেকে বৈশিষ্ট প্রাপ্ত অয়েচে। আমরা Object.create() বাবয়ার করেচি প্রোটোটাইপ চেইন তৈরি করার জন্য, যাতে
Dog এর বৈশিষ্ট গুলো Animal থেকে পদ্ধতি অ্যাক্সেস করার অনুমতি দেয়।
আমরা প্রোটোটাইপ এর কোন প্রপার্টি এবং পদ্ধতি যে কন সময় জুক্ত করতে বা পরিবর্তন করতে পারি। এবং সেই পরিবর্তনগুলি সকল ক্ষেত্রেই প্রতিফলিত হবে
নিচে উদাওরনে দেকুন, জেকানে প্রোটোটাইপ এর কোন প্রপার্টি এবং পদ্ধতি পরিবর্তন করা অয়েচে।
Person.prototype.sayGoodbye = function() { console.log(`Goodbye from ${this.name}`); }; person1.sayGoodbye(); // Output: Goodbye from Alice
প্রোটোটাইপ মেতড
এগুলো প্রোটোটাইপে নির্দেশ করা হয়েছে এবং সমস্ত প্রোটোটাইপে উত্তরাধিকারসূত্রে ভাগ করা হয়েছে৷ এগুলো সতিক ভাবে তত্ত রাক্তে পারে।
মেমরি-দক্ষ।
Instance মেতড
এগুলো সরাসরি উদাহরণে নির্দেশ করা হয় এবং অন্য কোন প্রোটোটাইপে ভাগ করা হয় না। এগুলো মেমরি-দক্ষ নয় তবে নির্দিষ্ট স্তানে কার্যকর হতে পারে।
নোট - প্রোটোটাইপগুলি ব্যবহার করুন জেকানে সমস্ত উদাহরণ জুড়ে ভাগ করা তাকে। Array.prototype বা Object.prototype-এর মতো অন্তর্নির্মিত বা built-in অবজেক্ট এর প্রোটোটাইপ পরিবর্তন করা এড়িয়ে চলুন অন্যান্য কোড বা লাইব্রেরির সাথে সম্ভাব্য দ্বন্দ্ব প্রতিরোধ করুন।
ES6 আমাদের class সিনট্যাক্স পরিচয় করিয়েছে, যা অবজেক্ট তৈরি করার জন্য আরো বেসি কার্যকরী। কিন্তু এটি এখনও হুডের নিচে প্রোটোটাইপ ব্যবহার করে।
class Person { constructor(name) { this.name = name; } greet() { console.log(`Hello, my name is ${this.name}`); } } const person = new Person('Charlie'); person.greet(); // Output: Hello, my name is Charlie
জাভাস্ক্রিপ্ট প্রোটোটাইপ গুলি অবজেক্ট তৈরি এবং তার পরবর্তী অবজেক্টের জন্য একটি শক্তিশালী পদ্দতি। প্রোটোটাইপ গুলো আপনাকে জাভাস্ক্রিপ্টের নমনীয়তা এবং দক্ষতার সুবিধা নিতে দেয়। বর্তমানে অ্যাপ্লিকেশন যদিও ES6 ক্লাসগুলির আরও আধুনিক সিনট্যাক্স প্রদান করে, প্রোটোটাইপের অন্তর্নিহিত নীতিগুলি জাভাস্ক্রিপ্টের অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং মডেলের জন্য মৌলিক দারনা।