___ ফটো__ ভি.এস. জাভাস্ক্রিপ্ট প্রোটোটাইপ


783

এই চিত্রটি আবার দেখায় যে প্রতিটি বস্তুর একটি প্রোটোটাইপ রয়েছে। কনস্ট্রাক্টর ফাংশন ফু এর নিজস্ব বৈশিষ্ট্যও রয়েছে __proto__যা ফাংশন.প্রোটোটাইপ, এবং যার ফলে __proto__আবার তার সম্পত্তিটির মাধ্যমে আবার অবজেক্ট.প্রোটোটাইপকেও উল্লেখ করা হয়। সুতরাং, পুনরাবৃত্তি করুন, Foo.prototype কেবল ফু এর একটি স্পষ্ট সম্পত্তি যা খ এবং সি সামগ্রীর প্রোটোটাইপকে বোঝায়।

var b = new Foo(20);
var c = new Foo(30);

__proto__এবং মধ্যে পার্থক্য কি prototype?

এখানে চিত্র বর্ণনা লিখুন

চিত্রটি dmitrysoshnikov.com থেকে নেওয়া হয়েছিল ।



5
আমি মনে করি টপ-ডাউন বা ডাউন-আপ পছন্দসই বিষয়। আমি প্রকৃতপক্ষে এটি এটিকে পছন্দ করি তাই আমি কোথা থেকে কোথা থেকে আসছি না পাওয়া পর্যন্ত আমি চিত্রটি সন্ধান করতে পারি।
মাইক লিপার্ট

1
আমি পছন্দ করি যে কীভাবে জাভাস্ক্রিপ্ট y.constructor কে y .__ প্রোটো __। কনস্ট্রাক্টর সমাধান করতে প্রোটোটাইপিকাল উত্তরাধিকার ব্যবহার করে। আমিও পছন্দ করি যে কীভাবে অবজেক্ট.প্রোটোটাইপ অবজেক্ট.প্রোটোটাইপ সহ প্রোটোটাইপিকাল উত্তরাধিকার শৃঙ্খলের শীর্ষে বসে আছে __ প্রোটো__ বাতিল হয়ে যায় set আমি এও পছন্দ করি যে কীভাবে ডায়াগ্রামটি তিনটি কলামের ধারণামূলক ভিজ্যুয়ালাইজেশন তৈরি করে যে প্রোগ্রামার কীভাবে 1 টি উদাহরণ হিসাবে বিবেচনা করে, 2. কনস্ট্রাক্টর, ৩. প্রোটোটাইপ যা নতুন কীওয়ার্ডের মাধ্যমে ইনস্ট্যান্ট করা হলে কনস্ট্রাক্টররা সেই দৃষ্টান্তগুলির সাথে মিলিত হয়।
জন সন্ডারসন


এবং এখন, যেমন আমি উত্তরগুলি পড়েছি, উপরের ভিডিওটি সত্যিই সুপারিশ করতে বাধ্য বোধ করি , কারণ এতে আসলে কী ঘটছে তার একটি স্ফটিক পরিষ্কার (এবং অ-ডাব্লুটিফাই) রয়েছে :)
এমএলভিএলজেবর

উত্তর:


764

__proto__পদ্ধতিগুলি সমাধানের জন্য অনুসন্ধান শৃঙ্খলে ব্যবহৃত প্রকৃত অবজেক্টটি হ'ল আপনি যখন কোনও বস্তু তৈরি prototypeকরার সময় এটি তৈরির জন্য ব্যবহৃত হয় :__proto__new

( new Foo ).__proto__ === Foo.prototype;
( new Foo ).prototype === undefined;

239
আহ! সুতরাং prototypeএটি নিজের (বা অন্যান্য অবজেক্টস) উদাহরণগুলিতে উপলভ্য নয়, তবে কেবলমাত্র নির্মাণকারী ফাংশনে।
rvighne

43
@rvighne: prototypeফাংশন উপর শুধুমাত্র উপলব্ধ যেহেতু তারা থেকে উদ্ভূত হয় Function, Functionএবং Objectকিন্তু অন্য কিছু তা নয়। তবে, __proto__সর্বত্র পাওয়া যায়।
তারিক

19
সুতরাং __proto__প্রকৃত বস্তু সংরক্ষিত এবং প্রোটোটাইপ হিসেবে ব্যবহার করা হয় যখন Myconstructure.prototypeশুধু জন্য একটি প্রতিচিত্র হয় __proto__যা প্রকৃত বস্তু সংরক্ষিত এবং protoype হিসাবে ব্যবহার Infact হয়। সুতরাং myobject.prototypeপ্রকৃত অবজেক্টের সম্পত্তি হবেনা কারণ এটির myobject.__proto__মতো দেখতে বাহ্যরেখার জন্য নির্মাণকারীর ফাংশন দ্বারা এটি কেবল একটি অস্থায়ী জিনিস ।
অ্যালেক্স_নাবু

9
এটা কি বলা উচিত যে __proto__কোনও সামগ্রীর সম্পত্তি অবজেক্টের কনস্ট্রাক্টর ফাংশনের prototypeসম্পত্তির পয়েন্টার ? যেমন foo .__ প্রোটো__ === foo.constructor.prototype
নিকো বেলিক

10
@ অ্যালেক্স_নাবু বেশ নয় newCar.__proto__ IS Car.prototype , এর উদাহরণ নয় Car.prototype। যদিও Car.protoype IS একটি একটি দৃষ্টান্ত objectCar.prototypeএমন কিছু বিষয় যা দেয় নয় newCarকোনো বৈশিষ্ট্য বা গঠন, এটি সহজভাবে IS পরবর্তী objectমধ্যে newCarএর প্রোটোটাইপ শৃঙ্খল। Car.prototypeঅস্থায়ী নয় object। এটা objectযে হিসাবে মান সেট করা হয় __proto__কোনো নতুন সম্পত্তির objects ব্যবহার প্রণীত Carহিসেবে constructor। আপনি যদি কোনও নীলনকশা হিসাবে ভাবতে চান তবে নতুন গাড়ির জন্য একটি নীলনকশা হিসাবে objectভাবেন । Carobject
সীউনরাইট

335

prototypeএকটি ফাংশন অবজেক্টের সম্পত্তি। এটি সেই ফাংশন দ্বারা নির্মিত বস্তুর প্রোটোটাইপ।

__proto__এটি কোনও বস্তুর অভ্যন্তরীণ সম্পত্তি, এর প্রোটোটাইপকে নির্দেশ করে। বর্তমান মানগুলি সমমানের Object.getPrototypeOf(O)পদ্ধতি সরবরাহ করে, যদিও ডি-ফ্যাক্টো স্ট্যান্ডার্ডটি আরও __proto__দ্রুত।

instanceofকোনও ফাংশনটির prototypeসাথে কোনও অবজেক্টের __proto__চেইনের সাথে তুলনা করে আপনি সম্পর্কগুলি খুঁজে পেতে পারেন এবং পরিবর্তনগুলি পরিবর্তন করে আপনি এই সম্পর্কগুলি ভেঙে ফেলতে পারেন prototype

function Point(x, y) {
    this.x = x;
    this.y = y;
}

var myPoint = new Point();

// the following are all true
myPoint.__proto__ == Point.prototype
myPoint.__proto__.__proto__ == Object.prototype
myPoint instanceof Point;
myPoint instanceof Object;

এখানে Pointএকটি কনস্ট্রাক্টর ফাংশন, এটি প্রক্রিয়াগতভাবে একটি অবজেক্ট (ডেটা স্ট্রাকচার) তৈরি করে। myPointএকটি বস্তু দ্বারা সংস্থাপিত হয় Point()তাই Point.prototypeকিছু সঞ্চিত myPoint.__proto__যে সময়ে।


2
এছাড়াও যদি আপনি __proto__কোনও সামগ্রীর সম্পত্তি পরিবর্তন করেন তবে এটি সেই বস্তুকে পরিবর্তন করে যার উপর প্রোটোটাইপ লুকআপ করা হয়। উদাহরণস্বরূপ, আপনি কল করতে পারেন __proto__উদাহরণস্বরূপ অবজেক্ট একটি ধরণের আছে একটি ফাংশন হিসাবে পদ্ধতি অবজেক্ট যোগ করতে পারেন ।
KZ

। myPoint .__ প্রোটো __ constructor.prototype == Point.prototype
ফ্রান্সিসকো

@kzh এলওএল যা আমাকে মজার ফলাফল দিয়েছে console.log(obj1.call) // [Function: call] obj1.call()// টাইপ এরির :জেজ1.সিএল কোনও ফাংশন নয়। আমি করেছিobj.__proto__ = Function.__proto__
abhisekp

myFn.__proto__ = {foo: 'bar'}
কেজেড

আমি আপনার পয়েন্ট পেয়েছি মনে হয়।
কমিকস্ক্রিপ্ট

120

প্রোটোটাইপ সম্পত্তি তৈরি করা হয় যখন কোনও ফাংশন ঘোষণা করা হয়।

এই ক্ষেত্রে:

 function Person(dob){
    this.dob = dob
 }; 

Person.prototypeআপনি উপরের ফাংশনটি ঘোষণা করার পরে সম্পত্তি অভ্যন্তরীণভাবে তৈরি হয়। পার্সন.প্রোটোটাইপগুলিতে অনেক সম্পত্তি যুক্ত করা যেতে পারে যা নতুন ব্যক্তি () ব্যবহার করে তৈরি করা ব্যক্তিদের দ্বারা ভাগ করা হয়।

// adds a new method age to the Person.prototype Object.
Person.prototype.age = function(){return date-dob}; 

এটা যে মূল্য হয় Person.prototypeহয় একটি Object(এটা প্রয়োজনীয় পরিবর্তন করা যাবে) ডিফল্টরূপে আক্ষরিক।

ব্যবহার করে তৈরি প্রতিটি উদাহরণের new Person()একটি __proto__সম্পত্তি রয়েছে যা নির্দেশ করে Person.prototype। এটি সেই শৃঙ্খল যা কোনও নির্দিষ্ট অবজেক্টের সম্পত্তি খুঁজে পেতে ট্র্যাভার্স করতে ব্যবহৃত হয়।

var person1 = new Person(somedate);
var person2 = new Person(somedate);

2 দৃষ্টান্ত সৃষ্টি Person, এই 2 বস্তু কল করতে পারেন ageপদ্ধতি Person.prototypeযেমন person1.age, person2.age

আপনার প্রশ্ন থেকে উপরের ছবিতে আপনি দেখতে পাচ্ছেন যে Fooএটি একটি Function Objectএবং অতএব এটির সাথে একটি __proto__লিঙ্ক রয়েছে Function.prototypeযা ঘুরে ফিরে এর উদাহরণ Objectএবং এর একটি __proto__লিঙ্ক রয়েছে Object.prototype। প্রোটো লিঙ্ক সহ এখানেই শেষ __proto__মধ্যে Object.prototypeনির্দেশিত null

__proto__প্রোটোটাইপাল উত্তরাধিকারের ভিত্তি তৈরি করে যে কোনও বস্তু তার প্রোটো চেইনের সমস্ত বৈশিষ্ট্যে অ্যাক্সেস রাখতে পারে ।

__proto__প্রোটোটাইপ চেইনে অ্যাক্সেসের কোনও স্ট্যান্ডার্ড উপায় নয়, স্ট্যান্ডার্ড তবে অনুরূপ পদ্ধতির ব্যবহার Object.getPrototypeOf(obj)

instanceofঅপারেটরের জন্য নীচের কোডটি আরও ভাল বোঝার সুযোগ দেয়:

অবজেক্ট instanceofক্লাস অপারেটর ফিরে আসে trueযখন কোনও বস্তু কোনও শ্রেণীর উদাহরণ হয়, বিশেষত যদি Class.prototypeসেই বস্তুর প্রোটো চেইনে পাওয়া যায় তবে বস্তুটি সেই শ্রেণীর উদাহরণ।

function instanceOf(Func){
  var obj = this;
  while(obj !== null){
    if(Object.getPrototypeOf(obj) === Func.prototype)
      return true;
    obj = Object.getPrototypeOf(obj);
  }
  return false;
}      

উপরোক্ত পদ্ধতিটি বলা যেতে পারে: instanceOf.call(object, Class)যা বস্তু শ্রেণীর উদাহরণ হিসাবে যদি সত্য ফিরে আসে।


2
আমি ভাবছিলাম কেন prototypeপ্রথম স্থানে অভ্যন্তরীণভাবে বস্তুটি তৈরি করা হয়েছিল ? এক কেবল ফাংশন অবজেক্টে নিজেই স্থির পদ্ধতি নির্ধারণ করতে পারে। যেমন function f(a){this.a = a}; f.increment = function(){return ++this.a}? prototypeআপত্তি করার পদ্ধতি যুক্ত করার পরে কেন এই উপায়টি বেছে নেওয়া হয়নি ? f.__proto__ = gজি যেখানে বেস ক্লাস থাকে সেখানে এটি কাজ করবে ।
abhisekp

হয়তো prototypeঅবজেক্টটি শেয়ারিংয়ের জন্য বেছে নেওয়া হয়েছিল কারণ কেবলমাত্র একচেটিয়া ফাংশন নির্মাণকারী বৈশিষ্ট্য ফাংশন কনস্ট্রাক্টর অবজেক্টে সংরক্ষণ করা যেতে পারে।
abhisekp

1
আসলে, যে একটি জগাখিচুড়ি কারণ হবে instanceofস্থাপিত হবে ({}) instanceof Function === trueসেখানে এগুলির নমুনা মধ্যে পার্থক্য করতে যদি কোন উপায় হবে prototypeসম্পত্তি মুছে ফেলা হবে।
abhisekp

@abisekp এর অর্থ কী: আপনি যদি f .__ প্রোটো__ = জি যেখানে বেস বেস বর্গ হয় তবে এটি কাজ করবে " আমি বুঝতে পারি না এর কিছু অর্থ আছে যা আমি বুঝতে পারি না, তবে আপনি যদি সেই পদ্ধতিতে বৈশিষ্ট্য এবং পদ্ধতিগুলি যুক্ত করতে চান তবে আপনি যখন newকীওয়ার্ডটি উদাহরণ তৈরি করার জন্য ব্যবহার করেছেন , তখন বৈশিষ্ট্য এবং পদ্ধতিগুলি অনুলিপি করা হবে না ওভার।
ডাবলআর্ট

66

এটি ভাবার একটি দুর্দান্ত উপায় হ'ল ...

prototypeconstructor()ফাংশন দ্বারা ব্যবহৃত হয় । এটিকে সত্যই কিছু বলা উচিত ছিল "prototypeToInstall", যেহেতু এটি।

এবং __proto__এটি কি কোনও বস্তুর উপর "ইনস্টল করা প্রোটোটাইপ" (যা constructor()ফাংশন থেকে বস্তুর উপরে তৈরি / ইনস্টল করা হয়েছিল )


2
আমি এটিকে উন্নত করেছিলাম, তবে সম্ভবত নিম্নগতির কারণ হ'ল "প্রোটোটাইপটি কনস্ট্রাক্টর () ফাংশন দ্বারা ব্যবহৃত হয়" বিবৃতিটি শোনাতে পারে যেমন নন কনস্ট্রাক্টর ফাংশন নেই, তবে ঘটনাটি নেই, তবুও এটি এখন আমাদের ফোকাস নয় is একটি নোট করতে পারেন যে প্রতিটি ক্রিয়াকলাপ সম্ভাব্য একটি
নির্মাতা

2
দয়া করে " constructor()ফাংশন" কে "কনস্ট্রাক্টর ফাংশন" এ পরিবর্তন করুন, যেহেতু " __proto__.constructor()ফাংশন" নিয়ে বিভ্রান্তি থাকতে পারে । আমি এটিকে গুরুত্বপূর্ণ হিসাবে বিবেচনা করছি __প্রোটো __ হিসাবে। যখন কোনও newকীওয়ার্ড ব্যবহৃত হয় তখন কনস্ট্রাক্টর প্রকৃতপক্ষে অনুরোধ করা হয় না ।
আলেকজান্ডার গঞ্চি

1
" প্রোটোটাইপটি কন্সট্রাক্টর () ফাংশন দ্বারা ব্যবহৃত হয় " বিবৃতিটি একটি গুরুত্বপূর্ণ সত্যের কেবল একটি অংশকে বলে কিন্তু এটি এমনভাবে বলেছিল যা সম্ভবত পাঠকদের মনে করে যে এটি সম্পূর্ণ সত্য। প্রোটোটাইপটি অভ্যন্তরীণভাবে জাভাস্ক্রিপ্টে প্রতিটি ফাংশন ঘোষণার জন্য তৈরি করা হয়েছে, ভবিষ্যতে কীভাবে ডাকা হবে তা নির্বিশেষে - নতুন কীওয়ার্ড সহ বা না করে ; ঘোষিত ফাংশনটির প্রোটোটাইপ কোনও বস্তুর আক্ষরিক দিকে নির্দেশ করে।
ইয়িলিং

62

ব্যাখ্যা করতে আমাদের একটি ফাংশন তৈরি করা যাক

 function a (name) {
  this.name = name;
 }

যখন জাভাস্ক্রিপ্ট এই কোডটি কার্যকর করে, এটি এতে prototypeসম্পত্তি যুক্ত করে a, prototypeসম্পত্তি এটিতে দুটি বৈশিষ্ট্যযুক্ত একটি বস্তু:

  1. constructor
  2. __proto__

সুতরাং আমরা যখন

a.prototype এটি ফিরে আসে

     constructor: a  // function definition
    __proto__: Object

এখন আপনি দেখতে পাচ্ছেন constructorফাংশনটি ছাড়া আর কিছুই aনয় এবং জাভাস্ক্রিপ্টের __proto__মূল স্তরের Objectদিকে নির্দেশ করে।

আসুন দেখি আমরা যখন ব্যবহার করি তখন কী হয় anew কী শব্দের সাথে ফাংশন ।

var b = new a ('JavaScript');

যখন জাভাস্ক্রিপ্ট এই কোডটি কার্যকর করে এটি 4 টি কাজ করে:

  1. এটি একটি নতুন অবজেক্ট তৈরি করে, একটি খালি অবজেক্ট // {}
  2. এটি তৈরি করে __proto__ উপর bএবং এটি নির্দেশ করে তোলে a.prototypeতাইb.__proto__ === a.prototype
  3. এটি কার্যকর করে a.prototype.constructor(যা ফাংশন সংজ্ঞাa সদ্য নির্মিত বস্তুর (যা পদক্ষেপ # 1 এ তৈরি করা হয়েছে) এর প্রসঙ্গ (এটি) হিসাবে ), তাই এটি name'জাভাস্ক্রিপ্ট' হিসাবে পাস হওয়া সম্পত্তি (যা যুক্ত করা হয় this) সদ্য নির্মিত বস্তুতে যুক্ত হয়।
  4. এটি (নতুন ধাপে তৈরি হওয়া 1 টি পদক্ষেপে) নতুনভাবে তৈরি বস্তুটি ফেরত দেয় var b নতুন তৈরি করা অবজেক্টকে নির্ধারিত হয়।

এখন আমরা যুক্ত a.prototype.car = "BMW"এবং করি b.carতবে আউটপুট "BMW" প্রদর্শিত হবে।

এর কারণ এটি যখন জাভাস্ক্রিপ্ট এই কোডটি কার্যকর করে এটিতে carসম্পত্তিটির সন্ধান করেছিল b, তখন এটি জাভাস্ক্রিপ্ট ব্যবহৃত হয়নি b.__proto__(যা ধাপ # 2 তে 'a.prototype' দেখানোর জন্য তৈরি হয়েছিল) এবং carসম্পত্তি খুঁজে পেয়েছিল তাই "BMW" ফিরিয়ে দেয়।


2
1. constructorফিরে আসে না a()! এটি ফিরে আসে a। ২. জাভাস্ক্রিপ্টে মূল বস্তু নয়, __proto__ফিরে আসে Object.prototype
ডাবলআর্ট

1
এটি একটি দুর্দান্ত উত্তর!
জন-রেমন

প্রোটোটাইপ আসলে কী (দুটি বৈশিষ্ট্যযুক্ত একটি বস্তু) এবং জাভাস্ক্রিপ্ট কীভাবে কোডের প্রতিটি অংশকে কার্যকর করে তা ব্যাখ্যা করার জন্য +1 এটি সেরা উত্তর। এই তথ্যটি আসা অবাক করা কঠিন is
java-addict301

53

প্রোটোটাইপ ভি.এস. ___ ফটো__ ভি.এস. [[Prototype]] এ

কোনও ফাংশন তৈরি করার সময়, প্রোটোটাইপ নামক একটি সম্পত্তি বস্তু স্বয়ংক্রিয়ভাবে তৈরি করা হচ্ছে (আপনি নিজে এটি তৈরি করেননি) এবং ফাংশন অবজেক্টের (দ্য constructor) সাথে যুক্ত করা হচ্ছে ।
দ্রষ্টব্য : এই নতুন প্রোটোটাইপ অবজেক্টটি দেশীয় জাভাস্ক্রিপ্ট অবজেক্টের সাথে অভ্যন্তরীণ-প্রাইভেট লিঙ্কটিও নির্দেশ করে বা।

উদাহরণ:

function Foo () {
    this.name = 'John Doe';
}

// Foo has an object property called prototype.
// prototype was created automatically when we declared the function Foo.
Foo.hasOwnProperty('prototype'); // true

// Now, we can assign properties and methods to it:
Foo.prototype.myName = function () {
    return 'My name is ' + this.name;
}

আপনি যদি কীওয়ার্ডটি Fooব্যবহার না করে কোনও নতুন অবজেক্ট তৈরি করেন তবে আপনি newমূলত (অন্যান্য জিনিসগুলির মধ্যে) একটি নতুন অবজেক্ট তৈরি করছেন যা ফাংশনটির প্রোটোটাইপের সাথে আমরা আগে আলোচনা করেছি যার অভ্যন্তরীণ বা ব্যক্তিগত লিঙ্ক রয়েছেFoo :

var b = new Foo();

b.[[Prototype]] === Foo.prototype  // true


ব্যক্তিগত যে ফাংশন এর বস্তু দুটো ঘটনার ডবল বন্ধনী প্রোটোটাইপ বা শুধু বলা [[Prototype]]। অনেক ব্রাউজার আমাদের এটির একটি সার্বজনীন লিঙ্কেজ সরবরাহ করছে called__proto__ !

আরও সুনির্দিষ্টভাবে বলতে গেলে , __proto__এটি আসলে একটি গিটার ফাংশন যা স্থানীয় জাভাস্ক্রিপ্ট অবজেক্টের অন্তর্ভুক্ত। এটা তোলে ফেরৎ যাই হোক না কেন অভ্যন্তরীণ-ব্যক্তিগত প্রোটোটাইপ দুটো ঘটনার thisঅবিচল (রিটার্ন [[Prototype]]এর b):

b.__proto__ === Foo.prototype // true

এটি লক্ষণীয় যে শুরু করার সাথে সাথে ECMAScript5আপনি অভ্যন্তরীণ ব্যক্তিগত লিঙ্কেজ পেতে getProotypeOf পদ্ধতিটি ব্যবহার করতে পারেন :

Object.getPrototypeOf(b) === b.__proto__ // true


উল্লেখ্য: এই উত্তর নতুন বস্তু বা নতুন কনস্ট্রাকটর তৈরি করার পুরো প্রক্রিয়া আবরণ মনস্থ করা না, কিন্তু সাহায্যের করাই ভালো কি বুঝতে __proto__, prototypeএবং [[Prototype]]এবং কিভাবে এটা কাজ করে।


2
@ টিউরাস, শিরোনামটিতে ক্লিক করুন, এটি ECMAScript স্পেসিফিকেশন ডকের দিকে নিয়ে যায়। বিভাগ 9 (সাধারণ এবং বহিরাগত বিষয়গুলির আচরণগুলি) দেখুন যা এটি আরও বিস্তারিতভাবে ব্যাখ্যা করে।
লাইয়ার এলরম

আমি মনে করি এখানে কিছু ভুল আছে: _ একটি নতুন অবজেক্টের সাথে ফাংশনটির প্রোটোটাইপের অভ্যন্তরীণ বা ব্যক্তিগত লিঙ্ক রয়েছে ফু_ আপনার অর্থ কী: একটি নতুন অবজেক্টটির ফু এর প্রোটোটাইপটির সাথে একটি অভ্যন্তরীণ বা ব্যক্তিগত লিঙ্ক রয়েছে ?
Koray Tugay

1
ধন্যবাদ @ কোরেতুগায়! হ্যাঁ, আমি এটিকে ভুল বানান দিয়েছি :) +1
লিওর এলরোম

30

উপরের দুর্দান্ত উত্তরের পাশাপাশি এটি কিছুটা পরিষ্কার করার জন্য:

function Person(name){
    this.name = name
 }; 

var eve = new Person("Eve");

eve.__proto__ == Person.prototype //true

eve.prototype  //undefined

দৃষ্টান্ত আছে __proto__ , ক্লাস আছে প্রোটোটাইপ


12

জাভাস্ক্রিপ্টে একটি ফাংশন কনস্ট্রাক্টর হিসাবে ব্যবহার করা যেতে পারে। এর অর্থ আমরা নতুন কীওয়ার্ড ব্যবহার করে সেগুলি থেকে বস্তু তৈরি করতে পারি। প্রতিটি কনস্ট্রাক্টর ফাংশন তাদের সাথে শৃঙ্খলযুক্ত অন্তর্নির্মিত বস্তুর সাথে আসে। এই অন্তর্নির্মিত বস্তুকে প্রোটোটাইপ বলা হয়।Instances of a constructor function use __proto__ to access the prototype property of its constructor function.

প্রোটোটাইপ ডায়াগ্রাম

  1. প্রথম আমরা একটি কন্সট্রাকটর তৈরি করা হয়েছে: function Foo(){}। পরিষ্কারভাবে বলতে গেলে, ফু কেবল একটি ফাংশন। তবে আমরা এটি থেকে নতুন কীওয়ার্ড দিয়ে একটি অবজেক্ট তৈরি করতে পারি। এজন্য আমরা এটিকে কনস্ট্রাক্টর ফাংশন বলি

  2. প্রতিটি ফাংশনের একটি অনন্য সম্পত্তি থাকে যা প্রোটোটাইপ সম্পত্তি বলে। সুতরাং, কনস্ট্রাক্টর ফাংশনটির Fooএকটি প্রোটোটাইপ সম্পত্তি রয়েছে যা এর প্রোটোটাইপকে নির্দেশ করে যা Foo.prototype(চিত্রটি দেখুন)।

  3. কনস্ট্রাক্টর ফাংশনগুলি নিজেরাই একটি ফাংশন যা একটি সিস্টেম কনস্ট্রাক্টরের একটি উদাহরণ যা [[ফাংশন]] কনস্ট্রাক্টর বলে। সুতরাং আমরা বলতে পারি যে function Fooএটি [[ফাংশন]] নির্মাতা দ্বারা নির্মিত is সুতরাং, __proto__আমাদের Foo functionইচ্ছার এটির নির্মাণকারীর প্রোটোটাইপটি নির্দেশ করুন, যা Function.prototype

  4. Function.prototypeএটি নিজেই একটি অবজেক্ট ছাড়া আর কিছুই নয় যা বলা হয় অন্য সিস্টেম কনস্ট্রাক্টর থেকে নির্মিত [[Object]]। সুতরাং, [[Object]]এর নির্মাতা Function.prototype। সুতরাং, আমরা বলতে পারি Function.prototypeএটির একটি উদাহরণ [[Object]]। সুতরাং __proto__এর Function.prototypeপয়েন্ট Object.prototype

  5. Object.prototypeপ্রোটোটাইপ চেইনে দাঁড়িয়ে সর্বশেষ ব্যক্তি। মানে এটি নির্মাণ করা হয়নি। এটি সিস্টেমে ইতিমধ্যে আছে। সুতরাং এর __proto__পয়েন্টস null

  6. এখন আমরা উদাহরণস্বরূপ আসা Foo। যখন আমরা ব্যবহার করে কোনও উদাহরণ তৈরি করি তখন new Foo()এটি একটি নতুন অবজেক্ট তৈরি করে যা এর উদাহরণ Foo। এর অর্থ Fooহ'ল এই দৃষ্টান্তগুলির নির্মাতা। এখানে আমরা দুটি দৃষ্টান্ত তৈরি করেছি (x এবং y)। __proto__x এবং y এর এভাবে নির্দেশ করে Foo.prototype


কেবল স্পষ্ট করে বলার জন্য: উদাহরণগুলির কোনও .প্রোটোটাইপ সম্পত্তি নেই? ঠিক কি কনস্ট্রাক্টরের কাজ ঠিক আছে? ... সুতরাং উদাহরণস্বরূপ এবং এর কনস্ট্রাক্টর ফাংশনের মধ্যে পার্থক্য হ'ল: কনস্ট্রাক্টর ফাংশনগুলির উভয়ই রয়েছে 1. প্রোটো ২। প্রোটোটাইপ অবজেক্ট যখন উদাহরণগুলিতে কেবল __ প্রোটো__ সম্পত্তি আছে ... সঠিক?
Shaz

@ শাজ আপনি ঠিক বলেছেন দৃষ্টান্তগুলি তাদের নির্মাণকারী ফাংশনের প্রোটোটাইপ সম্পত্তি অ্যাক্সেস করতে তাদের প্রোটো ব্যবহার করে ।
AL-zami

তবে আপনি কেন লিখছেন তা কেন: var car = Object.create (যানবাহন); আপনি গাড়ি পাবেন __ প্রোটো__ = যানবাহন তবে আপনিও একটি গাড়ী.প্রোটোটাইপ সম্পত্তি পাবেন যা Vehicle.prototype এ নির্দেশ করে?
Shaz

@ Shaz আপনি কি জस्ফিডেল সরবরাহ করতে পারেন যাতে আমি পরিস্থিতিটি কল্পনা করতে পারি?
AL-zami

1
এখানে car.prototype একটি উত্তরাধিকারসূত্রে প্রাপ্ত সম্পত্তি। গাড়িটি ফাংশন থেকে 'প্রোটোটাইপ' সম্পত্তি উত্তরাধিকার সূত্রে প্রাপ্ত। সুতরাং car.prototype === যান.প্রোটোটাইপ। "প্রোটোটাইপ" সম্পত্তি যানবাহনের একটি সম্পত্তি। গাড়ি তার প্রোটোটাইপ চেইনের মাধ্যমে এটি অ্যাক্সেস করতে পারে। আমি আশা করি এটি আপনার বিভ্রান্তি দূর করবে
AL-zami

8

সারসংক্ষেপ:

__proto__একটি বস্তুর সম্পত্তি একটি সম্পত্তি যে মানচিত্র হয় prototypeবস্তুর কন্সট্রাকটর ফাংশনের। অন্য কথায়:

instance.__proto__ === constructor.prototype // true

এটি prototypeকোনও বস্তুর শৃঙ্খলা গঠনে ব্যবহৃত হয় । prototypeশৃঙ্খল একটি বস্তুর উপর বৈশিষ্ট্যের জন্য একটি লুকআপ প্রক্রিয়া। যদি কোনও সামগ্রীর সম্পত্তি অ্যাক্সেস করা হয়, জাভাস্ক্রিপ্ট প্রথমে বস্তুর নিজের দিকে নজর দেবে। সম্পত্তিটি যদি সেখানে না পাওয়া যায় তবে এটি সমস্ত দিক পর্যন্ত উঠে যাবেprotochain পর্যন্ত এটি পুরোপুরি (বা না)

উদাহরণ:

function Person (name, city) {
  this.name = name;
}

Person.prototype.age = 25;

const willem = new Person('Willem');

console.log(willem.__proto__ === Person.prototype); // the __proto__ property on the instance refers to the prototype of the constructor

console.log(willem.age); // 25 doesn't find it at willem object but is present at prototype
console.log(willem.__proto__.age); // now we are directly accessing the prototype of the Person function 

আমাদের প্রথম লগ ফলাফল true, এটি কারণ __proto__কনস্ট্রাক্টর দ্বারা তৈরি দৃষ্টান্তের সম্পত্তি উল্লেখ করে কারণprototype সম্পত্তিটি কনস্ট্রাক্টরের সম্পত্তি । মনে রাখবেন, জাভাস্ক্রিপ্টে, ফাংশনগুলিও অবজেক্ট। অবজেক্টগুলির বৈশিষ্ট্য থাকতে পারে এবং যে কোনও ফাংশনের একটি ডিফল্ট সম্পত্তি হ'ল প্রোটোটাইপ নামের একটি সম্পত্তি।

তারপরে, যখন এই ফাংশনটি কনস্ট্রাক্টর ফাংশন হিসাবে ব্যবহার করা হবে, এটি থেকে ইনস্ট্যান্ট করা অবজেক্ট নামক একটি সম্পত্তি পাবেন __proto__। এবং এই __proto__সম্পত্তিটি prototypeকনস্ট্রাক্টর ফাংশনের সম্পত্তিকে বোঝায় (যা প্রতিটি ফাংশনটিতে ডিফল্টরূপে থাকে)।

কেন এটি দরকারী?

জাভাস্ক্রিপ্টের এমন বৈশিষ্ট্যগুলি অনুসন্ধান করার সময় একটি প্রক্রিয়া থাকে Objectsযার উপর 'প্রোটোটাইপাল উত্তরাধিকার' নামে পরিচিত , এখানে এটি মূলত যা করে:

  • প্রথমে সম্পত্তিটি অবজেক্টে অবস্থিত কিনা তা পরীক্ষা করা হয়েছে। যদি তা হয় তবে এই সম্পত্তিটি ফেরত দেওয়া হবে।
  • সম্পত্তিটি যদি বস্তুটিতেই না থাকে তবে এটি 'প্রোটোকেইন উপরে উঠবে'। এটি মূলত __proto__সম্পত্তি দ্বারা বর্ণিত বস্তুর দিকে নজর দেয় । সেখানে, এটি নির্ধারিত বস্তুর উপর সম্পত্তি উপলব্ধ কিনা তা পরীক্ষা করে __proto__
  • সম্পত্তি যদি __proto__বস্তুর উপরে না থাকে তবে এটি __proto__শৃঙ্খলে উঠে যাবে, Objectআপত্তি করার সমস্ত উপায় ।
  • যদি এটি বস্তু এবং তার prototypeশৃঙ্খলে কোথাও সম্পত্তিটি খুঁজে না পায় তবে এটি ফিরে আসবে undefined

উদাহরণ স্বরূপ:

function Person (name) {
  this.name = name;
}

let mySelf = new Person('Willem');

console.log(mySelf.__proto__ === Person.prototype);

console.log(mySelf.__proto__.__proto__ === Object.prototype);


7

আপনি জেএস নন জেনার কাছ থেকে আমি প্রোটোটাইপ শিখতে পেরেছি : এটি এবং অবজেক্ট প্রোটোটাইপস , যা নীচের নকশাটি বোঝার জন্য এবং এতগুলি ভুল ধারণা পরিষ্কার করার জন্য একটি দুর্দান্ত বই (এই কারণেই আমি উত্তরাধিকার এবং এ জাতীয় জিনিসগুলি ব্যবহার এড়াতে চাইছি 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

7

 জাভাস্ক্রিপ্ট প্রোটোটাইপ বনাম __প্রোটোটাইপ__

'use strict'
function A() {}
var a = new A();
class B extends A {}
var b = new B();
console.log('====='); // =====
console.log(B.__proto__ === A); // true
console.log(B.prototype.__proto__ === A.prototype); // true
console.log(b.__proto__ === B.prototype); // true
console.log(a.__proto__ === A.prototype); // true
console.log(A.__proto__ === Function.__proto__); // true
console.log(Object.__proto__ === Function.__proto__); // true
console.log(Object.prototype === Function.__proto__.__proto__); // true
console.log(Object.prototype.__proto__ === null); // true

জাভাস্ক্রিপ্টে, প্রতিটি অবজেক্টের (ফাংশনটিও খুব অবজেক্ট!) এর একটি __proto__সম্পত্তি রয়েছে, সম্পত্তিটি তার প্রোটোটাইপের উল্লেখ।

যখন আমরা newএকটি নতুন অবজেক্ট তৈরির জন্য কন্সট্রাক্টরের সাথে অপারেটরটি ব্যবহার করি , তখন নতুন বস্তুর __proto__সম্পত্তি নির্মাতার সম্পত্তি দিয়ে সেট করা হবে prototype, তারপরে কনস্ট্রাক্টরকে নতুন অবজেক্ট দ্বারা কল করা হবে, সেই প্রক্রিয়াতে "এই" নতুন অবজেক্টের রেফারেন্স হবে কনস্ট্রাক্টরের সুযোগে, অবশেষে নতুন অবজেক্টটি ফিরিয়ে দিন।

কনস্ট্রাক্টরের প্রোটোটাইপ __proto__সম্পত্তি, কনস্ট্রাক্টরের prototypeসম্পত্তি newঅপারেটরের সাথে কাজ করে ।

কনস্ট্রাক্টর অবশ্যই একটি ফাংশন হতে পারে তবে ফাংশনটি সর্বদা কনস্ট্রাক্টর না হলেও তার prototypeসম্পত্তি থাকলেও ।

প্রোটোটাইপ চেইন আসলে __proto__তার প্রোটোটাইপ রেফারেন্স করার জন্য অবজেক্টের সম্পত্তি এবং প্রোটোটাইপের __proto__সম্পত্তি প্রোটোটাইপের প্রোটোটাইপ রেফারেন্স করতে পারে এবং অবধি অবজেক্টের প্রোটোটাইপের __proto__সম্পত্তির রেফারেন্স পর্যন্ত যা নাল উল্লেখ করে।

উদাহরণ স্বরূপ:

console.log(a.constructor === A); // true
// "a" don't have constructor,
// so it reference to A.prototype by its ``__proto__`` property,
// and found constructor is reference to A

[[Prototype]]এবং __proto__সম্পত্তি আসলে একই জিনিস।

আমরা কোনও কিছুর প্রোটোটাইপ পেতে অবজেক্টের getProotypeOf পদ্ধতি ব্যবহার করতে পারি।

console.log(Object.getPrototypeOf(a) === a.__proto__); // true

আমরা যে কোনও ফাংশন লিখেছি তা newঅপারেটরের সাথে একটি অবজেক্ট তৈরি করতে ব্যবহার করা যেতে পারে , সুতরাং এই ফাংশনগুলির যে কোনও একটি নির্মাণকারী হতে পারে।


6

এটি বোঝার আরও একটি ভাল উপায়:

var foo = {}

/* 
foo.constructor is Object, so foo.constructor.prototype is actually 
Object.prototype; Object.prototype in return is what foo.__proto__ links to. 
*/
console.log(foo.constructor.prototype === foo.__proto__);
// this proves what the above comment proclaims: Both statements evaluate to true.
console.log(foo.__proto__ === Object.prototype);
console.log(foo.constructor.prototype === Object.prototype);

আইই 11 __proto__সমর্থিত হওয়ার পরেই । আইই 9 এর মতো সংস্করণটির আগে, আপনি এটিটি constructorপেতে ব্যবহার করতে পারেন __proto__


কেবলমাত্র আমি এটিকে অন্য উপায়ে লিখতে চাই: foo .__ প্রোটো__ === foo.constructor.prototype
epeleg

6

প্রোটোটাইপ

প্রোটোটাইপ একটি ফাংশনের সম্পত্তি। এটি নতুন কীওয়ার্ড সহ (কনস্ট্রাক্টর) ফাংশনটি ব্যবহার করে অবজেক্ট তৈরির নীলনকশা।

__proto__পদ্ধতি, বৈশিষ্ট্য সমাধানের জন্য লুকিং চেইনে ব্যবহৃত হয়। যখন কোনও বস্তু তৈরি হয় (নতুন কীওয়ার্ড সহ কনস্ট্রাক্টর ফাংশন ব্যবহার করে), __proto__(কনস্ট্রাক্টর) ফাংশন.প্রোটোটাইপ সেট করা হয়

function Robot(name) {
    this.name = name;
}
var robot = new Robot();

// the following are true   
robot.__proto__ == Robot.prototype
robot.__proto__.__proto__ == Object.prototype

এই বিভ্রান্তি দূর করতে আমার (কাল্পনিক) ব্যাখ্যা:

ভাবুন এখানে ফাংশনের সাথে সম্পর্কিত একটি কল্পিত শ্রেণি (ব্লুপ্রিন্ট / কোকী কাটার) রয়েছে। সেই কাল্পনিক শ্রেণি অবজেক্টগুলি ইনস্ট্যান্ট করতে ব্যবহৃত হয়। prototypeসেই কল্পিত শ্রেণিতে জিনিস যুক্ত করার জন্য হ'ল এক্সটেনশন মেকানিজম (সি # তে এক্সটেনশন পদ্ধতি বা সুইফট এক্সটেনশান)।

function Robot(name) {
    this.name = name;
}

উপরোক্ত হিসাবে কল্পনা করা যেতে পারে:

// imaginary class
class Robot extends Object{

    static prototype = Robot.class  
    // Robot.prototype is the way to add things to Robot class
    // since Robot extends Object, therefore Robot.prototype.__proto__ == Object.prototype

    var __proto__;

    var name = "";

    // constructor
    function Robot(name) {

        this.__proto__ = prototype;
        prototype = undefined;

        this.name = name;
    }

} 

সুতরাং,

var robot = new Robot();

robot.__proto__ == Robot.prototype
robot.prototype == undefined
robot.__proto__.__proto__ == Object.prototype

এখন prototypeরোবটের পদ্ধতিতে যুক্ত করুন :

Robot.prototype.move(x, y) = function(x, y){ Robot.position.x = x; Robot.position.y = y};
// Robot.prototype.move(x, y) ===(imagining)===> Robot.class.move(x, y)

উপরেরগুলি রোবট শ্রেণীর সম্প্রসারণ হিসাবে কল্পনা করা যায়:

// Swift way of extention
extension Robot{
    function move(x, y){    
        Robot.position.x = x; Robot.position.y = y
    }
}

যা ঘুরে,

// imaginary class
class Robot{

    static prototype = Robot.class // Robot.prototype way to extend Robot class
    var __proto__;

    var name = "";

    // constructor
    function Robot(name) {

        this.__proto__ = prototype;
        prototype = undefined;

        this.name = name;
    }

    // added by prototype (as like C# extension method)
    function move(x, y){ 
        Robot.position.x = x; Robot.position.y = y
    };
}

__proto__প্রোটোটাইপের আরও সুসংগত নামগুলির বিষয়ে এখনও ভাবছি । প্রোটোটাইপ এবং উত্তরাধিকার হতে পারে?
দিমিত্রি

আমি বলব, prototypeএবং __proto__উভয়ই এড়ানো উচিত। আমাদের এখন ক্লাস আছে এবং আমি ওওপি পছন্দ করি।
হাসান তারেক

সমস্যাটি হ'ল শ্রেণি তুলনামূলকভাবে নতুন এবং এটি মাইক্রোসফট জেএসক্রিপ্টের মতো সত্যই সুবিধাজনক ইঞ্জিন দ্বারা সমর্থিত নয় (সিটিতে কাজ করার সময় ভাল লাগবে এবং সর্বদা সেখানে উপস্থিত একটি দ্রুত এবং ময়লা স্ক্রিপ্ট ইঞ্জিন প্রয়োজন) এবং ন্যাশর্ন জাভাস্ক্রিপ্ট (যা সমস্ত কিছু নিয়ে আসে নতুন জাভা ইনস্টলেশনগুলি জেজেএসের অধীনে এবং জাভাটিকে খাঁটি গতিশীল পরিবেশে রাখার একটি দুর্দান্ত উপায় যেখানে আপনাকে ক্রমাগত জিনিস পুনরায় সংকলনের প্রয়োজন হয় না)। জিনিসটি যদি শ্রেণিটি চিনি হয়, তবে এটি কোনও সমস্যা হবে না, তবে এটি নয়, এটি এমন জিনিস সরবরাহ করে যা পুরানো জেএস সংস্করণগুলিতে এগুলি ছাড়া অসম্ভব। "ফাংশন" প্রসারিত করার মতো।
দিমিত্রি

শেষ পর্যন্ত আমরা সমর্থন পাব। আমি ব্যাকএন্ড বিকাশকারী, সুতরাং আমার কোনও সমস্যা নেই, আমি খুব কমই জেএসে কোড করি।
হাসান তারেক

এবং স্থিতিশীল সদস্যদের উত্তরাধিকার সূচিত করে এমনভাবে যে পিতামাতার কাছ থেকে নতুন / স্থিতিশীল সদস্যদের অপসারণ করা সন্তানের দ্বারা লক্ষ্য করা যায় (যা আমি জেএসক্রিপ্টে করার কোন উপায় সম্পর্কে ভাবতে পারি না, যা অবজেক্ট.সেসাইন / __ প্রোটো __ / গেটপ্রোটোটাইপ অফার দেয় না, তাই আপনি এটি অনুকরণ করতে মূল অবজেক্ট.প্রোটোটাইপটি দিয়ে টিঙ্কার করতে হবে)
দিমিত্রি

4

এটি সহজভাবে বলতে:

> var a = 1
undefined
> a.__proto__
[Number: 0]
> Number.prototype
[Number: 0]
> Number.prototype === a.__proto__
true

এটি আপনাকে X. প্রোটোটাইপ এর পরে বৈশিষ্ট্যগুলি সংযুক্ত করার অনুমতি দেয় X এর পরে প্রকারের ধরণের অবজেক্টগুলি ইনস্ট্যান্ট করা হয়েছে এবং তারা এখনও __প্রোটো__ রেফারেন্সের মাধ্যমে সেই নতুন বৈশিষ্ট্যগুলিতে অ্যাক্সেস পাবে যা জাভাস্ক্রিপ্ট-ইঞ্জিন প্রোটোটাইপ শৃঙ্খলে চলার জন্য ব্যবহার করে।


4

প্রোটোটাইপ বা অবজেক্ট.প্রোটোটাইপ একটি বস্তুর আক্ষরিক সম্পত্তি। এটি অবজেক্টকে উপস্থাপন করে প্রোটোটাইপ অবজেক্টকে যা প্রোটোটাইপ শৃঙ্খলে আরও সম্পত্তি বা পদ্ধতি যুক্ত করতে আপনি ওভাররাইড করতে পারেন।

একটি অ্যাক্সেসর সম্পত্তি (ফাংশনটি পান এবং সেট করুন) যা কোনও অ্যাক্সেসের মাধ্যমে এটির অভ্যন্তরীণ প্রোটোটাইপ প্রকাশ করে।

তথ্যসূত্র:

  1. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype
  2. http://www.w3schools.com/js/js_object_prototypes.asp

  3. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto


Object.prototypeআক্ষরিক কোনও অবজেক্টের সম্পত্তি নয়, {}.prototypeঅনির্ধারিত রিটার্নগুলি প্রিন্ট করার চেষ্টা করছে ; তবে এটির মাধ্যমে প্রবেশ করা যেতে পারে {}.__proto__, যা প্রত্যাবর্তন করে Object.prototype
ডাবলআর্ট

3

আমি জানি, আমি দেরি করে ফেলেছি তবে এটি সহজ করার চেষ্টা করি।

আমাদের বলুন একটি ফাংশন আছে

    function Foo(message){

         this.message = message ; 
     };

     console.log(Foo.prototype);

ফু ফাংশনে একটি প্রোটোটাইপ অবজেক্ট যুক্ত থাকবে। সুতরাং, যখনই আমরা জাভাস্ক্রিপ্টে কোনও ফাংশন তৈরি করি, এটির সাথে সর্বদা একটি প্রোটোটাইপ অবজেক্ট যুক্ত থাকে।

এখন আসুন এবং ফু ফাংশনটি ব্যবহার করে দুটি অবজেক্ট তৈরি করি।

    var a = new Foo("a");
    var b = new Foo("b");
    console.log(a.message);
    console.log(b.message);
  1. এখন আমাদের দুটি অবজেক্ট, একটি এবং অবজেক্ট বি। উভয়ই কনস্ট্রাক্টর ফু ব্যবহার করে তৈরি করা হয়েছে। মনে রাখবেন কনস্ট্রাক্টর এখানে কেবল একটি শব্দ।
  2. একটি এবং খ উভয় বস্তুর বার্তায় থাকা সম্পত্তিটির একটি অনুলিপি রয়েছে।
  3. এ এবং বি এই দুটি বস্তু কনস্ট্রাক্টর ফু এর প্রোটোটাইপ অবজেক্টের সাথে যুক্ত।
  4. A এবং b অবজেক্টগুলিতে, আমরা সমস্ত ব্রাউজারগুলিতে প্রোটো সম্পত্তি ব্যবহার করে ফু প্রোটোটাইপ অ্যাক্সেস করতে পারি এবং আইইতে আমরা অবজেক্ট.জেটপ্রোটোটাইপ (ক) বা অবজেক্ট.জেটপ্রোটোটাইপফ (বি) ব্যবহার করতে পারি

এখন, ফু.প্রোটোটাইপ, এ। প্রোটো , এবং খ। প্রোটো সমস্ত একই জিনিস বোঝায়।

    b.__proto__ === Object.getPrototypeOf(a);
    a.__proto__ ===  Foo.prototype;
    a.constructor.prototype  === a.__proto__;

উপরের সমস্ত সত্য ফিরে আসবে।

যেমনটি আমরা জানি, জাভাস্ক্রিপ্টে বৈশিষ্ট্যগুলি গতিশীলভাবে যুক্ত করা যেতে পারে। আমরা আপত্তি সম্পত্তি যুক্ত করতে পারেন

    Foo.prototype.Greet = function(){

         console.log(this.message);
    }
    a.Greet();//a
    b.Greet();//b
    a.constructor.prototype.Greet();//undefined 

আপনি দেখতে পেয়েছি আমরা Foo.prototype এ গ্রিটি () পদ্ধতিটি যুক্ত করেছি তবে এটি a এবং b বা অন্য কোনও অবজেক্টে প্রবেশযোগ্য যা ফু ব্যবহার করে নির্মিত।

A.Greet () চালানোর সময়, জাভাস্ক্রিপ্ট প্রথমে গ্রেটকে সম্পত্তি তালিকার একটি বস্তুতে অনুসন্ধান করবে। খুঁজে না পেয়ে এটি প্রোটো চেইনে উঠে যাবে । যেহেতু একটি. প্রোটো এবং ফু.প্রোটোটাইপ একই জিনিস, জাভাস্ক্রিপ্ট গ্রেট () পদ্ধতিটি আবিষ্কার করবে এবং এটি সম্পাদন করবে।

আমি আশা করি, এখন প্রোটোটাইপ এবং প্রোটো কিছুটা সরল করা হয়েছে।


3

ব্যাখ্যামূলক উদাহরণ:

function Dog(){}
Dog.prototype.bark = "woof"

let myPuppie = new Dog()

এখন, মাইপ্প্পির __proto__সম্পত্তি রয়েছে যা ডগ.প্রোটোটাইপকে নির্দেশ করে।

> myPuppie.__proto__
>> {bark: "woof", constructor: ƒ}

তবে মাইপাপির কোনও প্রোটোটাইপ সম্পত্তি নেই।

> myPuppie.prototype
>> undefined

সুতরাং, __proto__মাইপাপ্পির মধ্যে কনস্ট্রাক্টর ফাংশনের .প্রোটোটাইপ বৈশিষ্ট্যটি উল্লেখ করা হয়েছে যা এই অবজেক্টটি ইনস্ট্যান্ট করতে ব্যবহৃত হয়েছিল (এবং বর্তমান মাইপাপ্পি অবজেক্টটির সাথে "ডেলিগেট" রয়েছে__proto__ অবজেক্টের ), যখন MyPuppie এর প্রোটোটাইপ সম্পত্তি কেবল অনুপস্থিত (যেহেতু আমরা সেট করে নি)।

এমপিজে-র দ্বারা এখানে ভাল ব্যাখ্যা: প্রোটো বনাম প্রোটোটাইপ - জাভাস্ক্রিপ্টে অবজেক্ট ক্রিয়েশন


3

আমি নিজের জন্য একটি ছোট অঙ্কন তৈরি করেছি যা নিম্নলিখিত কোড স্নিপেটকে উপস্থাপন করে:

var Cat = function() {}
var tom = new Cat()

__প্রোটো__ এবং প্রোটোটাইপ বোঝা

আমার ক্লাসিকাল ওও পটভূমি রয়েছে, সুতরাং এই পদ্ধতিতে শ্রেণিবিন্যাসের প্রতিনিধিত্ব করা সহায়ক ছিল। এই চিত্রটি পড়তে আপনাকে সহায়তা করতে, চিত্রের আয়তক্ষেত্রগুলিকে জাভাস্ক্রিপ্ট অবজেক্ট হিসাবে বিবেচনা করুন। এবং হ্যাঁ, ফাংশনগুলিও বস্তু। ;)

জাভাস্ক্রিপ্টে অবজেক্টগুলির বৈশিষ্ট্য রয়েছে এবং সেগুলির মধ্যে __proto__একটি।

এই সম্পত্তির পিছনে ধারণাটি হ'ল (উত্তরাধিকার) শ্রেণিবিন্যাসে পূর্বপুরুষের অবজেক্টের দিকে নির্দেশ করা।

জাভাস্ক্রিপ্টের মূল অবজেক্টটি এবং Object.prototypeঅন্যান্য সমস্ত অবজেক্টস এটির বংশধর। __proto__রুট বস্তুর সম্পত্তি nullযা উত্তরাধিকার শৃঙ্খল শেষে প্রতিনিধিত্ব করে,।

আপনি লক্ষ্য করবেন যে prototypeএটি কার্যকারিতার সম্পত্তি। Catএকটি ফাংশন, কিন্তু Functionএবং Objectহয় (নেটিভ) ফাংশন। tomকোনও ফাংশন নয়, সুতরাং এটির এই সম্পত্তি নেই।

এই সম্পত্তির পিছনে ধারণাটি কোনও অবজেক্টের দিকে নির্দেশ করা যা নির্মাণে ব্যবহৃত হবে, অর্থাত্ যখন আপনি newসেই ফাংশনে অপারেটরকে কল করবেন ।

নোট করুন যে প্রোটোটাইপ অবজেক্টস (হলুদ আয়তক্ষেত্র) এর আরেকটি সম্পত্তি রয়েছে constructorযা সম্পর্কিত ফাংশন অবজেক্টকে নির্দেশ করে। বংশবৃদ্ধির কারণে এটি চিত্রিত হয়নি।

প্রকৃতপক্ষে, যখন আমরা tomবস্তুটি তৈরি করব তখন তৈরি করা অবজেক্টের কনস্ট্রাক্টর ফাংশনের অবজেক্টে সম্পত্তি সেট করা new Cat()থাকবে ।__proto__prototype

শেষ পর্যন্ত আসুন আমরা এই চিত্রটি কিছুটা খেলি। নিম্নলিখিত বিবৃতি সত্য:

  • tom.__proto__সম্পত্তি হিসাবে একই বস্তু পয়েন্ট Cat.prototype

  • Cat.__proto__পয়েন্ট Function.prototypeবস্তু, ঠিক Function.__proto__এবং Object.__proto__না।

  • Cat.prototype.__proto__এবং tom.__proto__.__proto__একই বস্তুর বিন্দু এবং সেটা হল Object.prototype

চিয়ার্স!


খুব ভালভাবে ব্যাখ্যা!
স্ট্যাকওভারফ্লো UI

@ থিশিনাইলাইট, tom.__proto__এবং কঠোর Cat.prototypeসমান, সুতরাং, tom.__proto__ === Cat.prototype এবং Cat.prototype === tom.__proto__সত্য are তো, ছবিটির তীরটি দিয়ে কী বোঝাতে চেয়েছেন ??
aXuser264

কালো তীর (যদি আপনি এটি উল্লেখ করে থাকেন) তবে অবজেক্টটির সম্পত্তি ব্যতীত কোনও বিশেষ অর্থ নেই। সুতরাং prototypeসম্পত্তি Catবস্তু (আপনার প্রশ্নের থেকে)।
সময়মতো

2

সংজ্ঞা

(প্রথম বন্ধনের ভিতরে নম্বর () নীচে লিখিত কোডের একটি 'লিঙ্ক')

prototype- একটি অবজেক্ট যা এর অন্তর্ভুক্ত:
=> ফাংশন (3) এর ConstructorFunction.prototype(5) যা প্রতিটি বস্তুর দ্বারা অ্যাক্সেসযোগ্য (4) এই কনস্ট্রাক্টর ফাংশন (1) দ্বারা তৈরি করা বা তৈরি করা যায় (1)
=> কনস্ট্রাক্টর নিজেই কাজ করে (1) )
=> __proto__এই নির্দিষ্ট বস্তুর (প্রোটোটাইপ অবজেক্ট)

__proto__ (ড্যানডোর প্রোটো?) - কোনও নির্দিষ্ট কন্সট্রাক্টর ফাংশন (1) এর মাধ্যমে তৈরি করা কোনও অবজেক্ট (2) এর মধ্যে একটি লিঙ্ক এবং সেই কনস্ট্রাক্টরের প্রোটোটাইপ অবজেক্টের বৈশিষ্ট্য (5) যা প্রতিটি তৈরি বস্তুকে (2) প্রোটোটাইপের ফাংশনগুলিতে অ্যাক্সেস করতে দেয় এবং পদ্ধতি (4) (__proto__ জেএসের প্রতিটি একক সামগ্রীতে ডিফল্টরূপে অন্তর্ভুক্ত থাকে)

কোড স্পষ্টকরণ

1।

    function Person (name, age) {
        this.name = name;
        this.age = age;} 

2।

    var John = new Person(‘John’, 37);
    // John is an object

3।

    Person.prototype.getOlder = function() {
        this.age++;
    }
    // getOlder is a key that has a value of the function

4।

    John.getOlder();

5।

    Person.prototype;

1

আমি চতুর্থ গ্রেডের ব্যাখ্যা চেষ্টা করব:

বিষয়গুলি খুব সাধারণ। একটি prototypeকিভাবে কিছু নির্মাণ করা উচিত একটি উদাহরণ। তাই:

  • আমি একজন functionএবং আমি আমার অনুরূপ নতুন অবজেক্ট তৈরি করিprototype

  • আমি একজন objectএবং আমি আমার __proto__উদাহরণ হিসাবে ব্যবহার করে নির্মিত হয়েছিল

প্রমাণ :

function Foo() { }

var bar = new Foo()

// `bar` is constructed from how Foo knows to construct objects
bar.__proto__ === Foo.prototype // => true

// bar is an instance - it does not know how to create objects
bar.prototype // => undefined

1
না, তন্ন তন্ন prototypeঅথবা একটি __proto__যে কোনো সময় একটি নীল নকশা হিসেবে কোন বস্তুর তৈরি করতে ব্যবহার করা হয় বা। এটি অস্পষ্ট classসিনট্যাক্স দ্বারা প্রবর্তিত একটি পৌরাণিক কাহিনী এবং এটি পূর্বসূরীদের। যেমন উত্তর-পোস্টে বলা হয়েছে এটি সন্ধানের শৃঙ্খলার জন্য ব্যবহৃত হয়েছে এবং এর সাথে ব্যবহৃত prototypeসনাক্তকরণের ক্ষেত্রে (যা আমাকে সহ অনেক ব্যবহারকারীকে বিভ্রান্ত করছে এমন ভান করা-উত্কৃষ্ট পদ্ধতির অংশ)। constructornew
ক্রিস্টফ কলিন

প্রথম পয়েন্টটি হওয়া উচিত "আমি একটি ফাংশন এবং আমি নতুন অবজেক্টগুলি তৈরি করি যা আমার প্রোটোটাইপে প্রতিনিধিত্ব করবে"
নিতিন যাদব

1

আপনার তৈরি প্রতিটি ফাংশনটির একটি সম্পত্তি রয়েছে called prototype এবং এটি খালি অবজেক্ট হিসাবে তার জীবন শুরু করে। আপনি এই ফাংশনটি কনস্ট্রাক্টর ফাংশন হিসাবে অর্থাৎ 'নতুন' কীওয়ার্ড সহ ব্যবহার না করা পর্যন্ত এই সম্পত্তিটির কোনও ব্যবহার নেই।

এটি প্রায়শই __proto__কোনও সামগ্রীর সম্পত্তি নিয়ে বিভ্রান্ত হয় । কিছু বিভ্রান্ত হতে পারে এবং ব্যতীত prototypeকোনও সামগ্রীর সম্পত্তি তাদের কোনও বস্তুর প্রোটো পেতে পারে। তবে এটি ঘটনা নয়। prototypeপেতে ব্যবহার করা হয়__proto__একটি ফাংশন কনস্ট্রাক্টর থেকে তৈরি একটি বস্তুর

উপরের উদাহরণে:

function Person(name){
    this.name = name
}; 

var eve = new Person("Eve");

console.log(eve.__proto__ == Person.prototype) // true
// this is exactly what prototype does, made Person.prototype equal to eve.__proto__

আমি এটা জ্ঞান করে তোলে আশা করি।


1
prototype__proto__কোনও অবজেক্ট তৈরি করতে ব্যবহৃত হয় না । __proto__অ্যাক্সেস করা হলে, কেবলমাত্র prototypeবস্তুর একটি রেফারেন্স সরবরাহ করে ।
ডাবলআর্ট

1

__proto__স্থির পদ্ধতির জন্য ব্যবহার সম্পর্কে কী ?

function Foo(name){
  this.name = name
  Foo.__proto__.collection.push(this)
  Foo.__proto__.count++

}

Foo.__proto__.count=0
Foo.__proto__.collection=[]

var bar = new Foo('bar')
var baz = new Foo('baz')

Foo.count;//2
Foo.collection // [{...}, {...}]
bar.count // undefined

ঠিক এই কারণেই একটি উত্তর " জাভাস্ক্রিপ্টে __proto__ভিএস prototype" ?
আন্দ্রেয়াস

এটি ভাল বা Foo.collection.push সম্পর্কে (কি) Foo.count ++
সেলভা গণপথ


1

প্রোটাইপাল শৃঙ্খলার জন্য শুধুমাত্র একটি অবজেক্ট ব্যবহার করা হয়। এই বস্তুর স্পষ্টতই একটি নাম এবং একটি মান রয়েছে: __proto__এটির নাম এবং prototypeএটির মান। এখানেই শেষ.

এটিকে আরও সহজে উপলব্ধি করতে, এই পোস্টের শীর্ষে চিত্রটি দেখুন (দিমিত্রি সোশনিকভ দ্বারা ডায়াগ্রাম), আপনি __proto__ব্যতীত অন্য কোনও কিছুর পয়েন্ট পাবেন নাprototype এর মান হিসাবে ।

সংক্ষেপটি হ'ল: __proto__সেই নাম যা প্রোটোটাইপাল অবজেক্টকে উল্লেখ করে এবং prototypeএটি প্রকৃত প্রোটোটাইপাল অবজেক্ট।

এটি বলার মতো:

let x = {name: 'john'};

xবস্তুর নাম (পয়েন্টার), এবং {name: 'john'}প্রকৃত অবজেক্ট (ডেটা মান)।

দ্রষ্টব্য: তারা কীভাবে উচ্চ স্তরের সাথে সম্পর্কিত তা এটি কেবলমাত্র একটি বিস্তৃত সরলকরণের ইঙ্গিত।

আপডেট: আরও ভাল উদাহরণের জন্য এখানে একটি সাধারণ কংক্রিট জাভাস্ক্রিপ্ট উদাহরণ রয়েছে:

let x = new String("testing") // Or any other javascript object you want to create

Object.getPrototypeOf(x) === x.__proto__; // true

এর মানে হল যখন Object.getPrototypeOf(x)আমাদের প্রকৃত মূল্য পায় x(যা তার প্রোটোটাইপ হয়), ঠিক কি __proto__এর xপ্রতি নির্দেশ করা হয়। সুতরাং __proto__প্রকৃতপক্ষে প্রোটোটাইপ নির্দেশ করা হয় x। সুতরাং __proto__রেফারেন্স x(পয়েন্টার x) এবং prototypeএটি x(এর প্রোটোটাইপ) এর মান ।

আমি আশা করি এটি এখন কিছুটা পরিষ্কার হয়ে গেছে।


1

প্রোটোটাইপিকাল উত্তরাধিকার বোঝার জন্য যে কেউ প্রাসঙ্গিক এটি একটি অত্যন্ত গুরুত্বপূর্ণ প্রশ্ন। আমি যা বুঝি তার থেকে প্রোটোটাইপ ডিফল্টরূপে নির্ধারিত হয় যখন কোনও ফাংশন থেকে নতুন দিয়ে কোনও বস্তু তৈরি করা হয় কারণ ফাংশনে সংজ্ঞা অনুসারে প্রোটোটাইপ অবজেক্ট থাকে:

function protofoo(){
}
var protofoo1 = new protofoo();
console.log(protofoo.prototype.toString()); //[object Object]

যখন আমরা নতুন ছাড়াই একটি সাধারণ অবজেক্ট তৈরি করি, অর্থাত কোনও ফাংশন থেকে স্পষ্টভাবে, এটির প্রোটোটাইপ থাকে না তবে এতে একটি ফাঁকা প্রোটো থাকে যা প্রোটোটাইপ বরাদ্দ করতে পারে।

var foo={
  check: 10
};
console.log(foo.__proto__); // empty
console.log(bar.prototype); //  TypeError
foo.__proto__ = protofoo1; // assigned
console.log(foo.__proto__); //protofoo

আমরা কোনও অবজেক্টকে স্পষ্টভাবে লিঙ্ক করতে Object.create ব্যবহার করতে পারি।

// we can create `bar` and link it to `foo`
var bar = Object.create( foo );
bar.fooprops= "We checking prototypes";
console.log(bar.__proto__); // "foo"
console.log(bar.fooprops); // "We checking prototypes"
console.log(bar.check); // 10 is delegated to `foo`

0

__proto__কনস্ট্রাক্ট বেস হয় prototypeএবং একটি কন্সট্রাকটর ফাংশন যেমন: function human(){}হয়েছে prototypeএর মাধ্যমে ভাগ যা __proto__কন্সট্রাকটর ফাংশনের নতুন উদাহরণ হবে। আরও বিশদ এখানে পড়ুন


@ ডেরিক ড্যানিয়েল: আপনি কেন এটিকে ভোট দিয়েছেন তা নিশ্চিত নন তবে আপনি যে সম্পাদনা করেছেন তা আমি জানার চেষ্টা করছি না। আরও ছাড়পত্রের জন্য এটি আরও সম্পাদনা করা হয়েছে :)।
জ্যোতি দুহান

জ্যোতি, আমি আপনার উত্তরটি ভোট দিয়েছি না, অন্য কেউ করেছে, আমি এটি সম্পাদনা করেছি :)
ফ্রিল্যান্সার

0

যেহেতু এই ন্যায়ত বিবৃত

__proto__প্রকৃত বস্তু সমাধানে পদ্ধতি লুকআপ শৃঙ্খল ব্যবহার করা হয়, ইত্যাদি প্রোটোটাইপ অবজেক্ট বিল্ড করতে ব্যবহৃত হয় হয় __proto__যখন আপনি নতুন সঙ্গে একটি বস্তু তৈরি করুন:

( new Foo ).__proto__ === Foo.prototype;
( new Foo ).prototype === undefined;

আমরা আরও খেয়াল করতে পারি যে __proto__ফাংশন কনস্ট্রাক্টর ব্যবহার করে তৈরি করা কোনও সামগ্রীর সম্পত্তি মেমরির অবস্থানের দিকে প্রোটোটাইপের দ্বারা নির্দেশিত হয় সম্পত্তি সেই সম্পর্কিত কনস্ট্রাক্টরের সম্পত্তি ।

যদি আমরা কনস্ট্রাক্টর ফাংশনটির প্রোটোটাইপের মেমরি অবস্থান পরিবর্তন করি , তবে __proto__উত্পন্ন অবজেক্টের মূল ঠিকানা জায়গার দিকে নির্দেশ করা অবিরত থাকবে। সুতরাং উত্তরাধিকার শৃঙ্খলে সাধারণ সম্পত্তি উপলব্ধ করার জন্য, সম্পত্তিটিকে পুনরায় আরম্ভ করার পরিবর্তে সর্বদা নির্মাণকারী ফাংশন প্রোটোটাইপতে সম্পত্তি যুক্ত করুন (যা এর স্মৃতি ঠিকানা পরিবর্তন করবে)।

নিম্নলিখিত উদাহরণ বিবেচনা করুন:

function Human(){
    this.speed = 25;
}

var himansh = new Human();

Human.prototype.showSpeed = function(){
    return this.speed;
}

himansh.__proto__ === Human.prototype;  //true
himansh.showSpeed();    //25

//now re-initialzing the Human.prototype aka changing its memory location
Human.prototype = {lhs: 2, rhs:3}

//himansh.__proto__ will still continue to point towards the same original memory location. 

himansh.__proto__ === Human.prototype;  //false
himansh.showSpeed();    //25

-1

আমার উপলব্ধিটি হ'ল: __প্রোট__ এবং প্রোটোটাইপ সমস্ত প্রোটোটাইপ চেইন কৌশলটির জন্য পরিবেশন করা হয়। পার্থক্যটি হ'ল আন্ডারস্কোর সহ নামযুক্ত ফাংশন (যেমন __প্রোট___) বিকাশকারীদের পক্ষে মোটেই স্পষ্টভাবে আহ্বান করা নয়। অন্য কথায়, এগুলি হ'ল উত্তরাধিকার ইত্যাদির মতো কিছু ব্যবস্থার জন্য তারা 'ব্যাক-এন্ড'। তবে আন্ডারস্কোর ছাড়াই নামযুক্ত ফাংশনগুলি স্পষ্টভাবে আহ্বানের জন্য ডিজাইন করা হয়েছে, সেগুলি 'ফ্রন্ট-এন্ড'।


3
নামকরণের কনভেনশন ছাড়াও আরও অনেক কিছু রয়েছে __proto__এবং রয়েছে prototype। তারা একই বস্তুর দিকে নির্দেশ করতে পারে বা নাও করতে পারে। @Zyklus উত্তর দেখুন।
6:30 এ ডেমিমেক্স

1
@ ডিমিসেক্স অবশ্যই আপনি বলেছেন সঠিক, তবে আমার মতে নাম পার্থক্যটি কার্যকারিতার বিপরীতে প্রকাশিত exposed
বেইচাই

"আপনার বোঝাপড়া অনুসারে" কেবল উল্লেখ করা যথেষ্ট নয়, বিশেষত যখন অন্যান্য ভাল উত্তর আগে সরবরাহ করা হয়েছিল ...
প্রোফনন্দা a

-3

!!! এটি বিশ্বের সেরা ব্যাখ্যা !!!!!

var q = {}
var prototype = {prop: 11}

q.prop // undefined
q.__proto__ = prototype
q.prop // 11

ফাংশন কনস্ট্রাক্টরগুলিতে জাভাস্ক্রিপ্ট ইঞ্জিন এগুলি q.__proto__ = prototypeস্বয়ংক্রিয়ভাবে কল করে যখন আমরা লিখি new Class, এবং __proto__প্রপ সেটেClass.prototype

function Class(){}
Class.prototype = {prop: 999} // set prototype as we need, before call new

var q = new Class() // q.__proto__ = Class.prototype
q.prop // 999

উপভোগ করুন%)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.