আপনি জেএস নন জেনার কাছ থেকে আমি প্রোটোটাইপ শিখতে পেরেছি : এটি এবং অবজেক্ট প্রোটোটাইপস , যা নীচের নকশাটি বোঝার জন্য এবং এতগুলি ভুল ধারণা পরিষ্কার করার জন্য একটি দুর্দান্ত বই (এই কারণেই আমি উত্তরাধিকার এবং এ জাতীয় জিনিসগুলি ব্যবহার এড়াতে চাইছি instanceof
)।
লোকেরা এখানে যেমন জিজ্ঞাসা করেছিল আমি কিন্তু একই প্রশ্ন করি। বেশ কয়েকটি উত্তর সত্যই সহায়ক এবং আলোকিত। আমি আমার বোধগম্যতা ভাগ করতে চাই।
প্রোটোটাইপ কী?
জাভাস্ক্রিপ্টের অবজেক্টগুলির একটি অভ্যন্তরীণ সম্পত্তি রয়েছে [[Prototype]]
, যা স্পেসিফিকেশন হিসাবে চিহ্নিত করা হয় , যা কেবল অন্য কোনও বস্তুর রেফারেন্স। প্রায় সমস্ত বস্তুকে নন-null
তৈরি হওয়ার সময় এই সম্পত্তিটির জন্য হয়।
কীভাবে কোনও অবজেক্টের প্রোটোটাইপ পাবেন?
মাধ্যমে __proto__
বাObject.getPrototypeOf
var a = { name: "wendi" };
a.__proto__ === Object.prototype // true
Object.getPrototypeOf(a) === Object.prototype // true
function Foo() {};
var b = new Foo();
b.__proto__ === Foo.prototype
b.__proto__.__proto__ === Object.prototype
কি prototype
?
prototype
কোনও ফাংশনের বিশেষ সম্পত্তি হিসাবে স্বয়ংক্রিয়ভাবে তৈরি হওয়া একটি বস্তু যা প্রতিনিধি দল (উত্তরাধিকার) চেইন, ওরফে প্রোটোটাইপ শৃঙ্খলা প্রতিষ্ঠার জন্য ব্যবহৃত হয়।
আমরা যখন একটি ফাংশন তৈরি a
, prototype
স্বয়ংক্রিয়ভাবে একটি বিশেষ সম্পত্তি হিসেবে তৈরি করা হয় a
এবং হিসাবে ফাংশন কোড সংরক্ষণ constructor
উপর prototype
।
function Foo() {};
Foo.prototype // Object {constructor: function}
Foo.prototype.constructor === Foo // true
আমি এই সম্পত্তিটি কোনও ফাংশন অবজেক্টের বৈশিষ্ট্য (পদ্ধতি সহ) সংরক্ষণ করার জায়গা হিসাবে বিবেচনা করতে চাই। এছাড়াও যে কারণে জাতীয় মধ্যে ইউটিলিটি ফাংশন মত সংজ্ঞায়িত করা হয় Array.prototype.forEach()
,Function.prototype.bind()
,Object.prototype.toString().
কেন একটি ফাংশন সম্পত্তি জোর দেওয়া ?
{}.prototype // undefined;
(function(){}).prototype // Object {constructor: function}
// The example above shows object does not have the prototype property.
// But we have Object.prototype, which implies an interesting fact that
typeof Object === "function"
var obj = new Object();
সুতরাং, Arary
, Function
, Object
সব ফাংশন আছে। আমার স্বীকার করা উচিত যে এটি জেএসের উপর আমার ছাপকে সতেজ করে। আমি জানি যে ফাংশনগুলি জেএসে প্রথম শ্রেণির নাগরিক তবে এটি মনে হয় যে এটি ফাংশনগুলিতে নির্মিত।
__proto__
এবং মধ্যে পার্থক্য কিprototype
?
__proto__
একটি রেফারেন্স প্রতিটি বিষয়তে এটি উল্লেখ করতে কাজ করে[[Prototype]]
সম্পত্তি ।
prototype
কোনও ফাংশনের বিশেষ সম্পত্তি হিসাবে স্বয়ংক্রিয়ভাবে তৈরি করা একটি বস্তু যা কোনও ফাংশন অবজেক্টের বৈশিষ্ট্য (পদ্ধতি সহ) সঞ্চয় করতে ব্যবহৃত হয়।
এই দুটি দিয়ে আমরা মানসিকভাবে প্রোটোটাইপ চেইনটি তৈরি করতে পারি। এই ছবিটি যেমন চিত্রিত করে:
function Foo() {}
var b = new Foo();
b.__proto__ === Foo.prototype // true
Foo.__proto__ === Function.prototype // true
Function.prototype.__proto__ === Object.prototype // true
__proto__
পৃথক হয়constructor.prototype
?