প্রোটোটাইপ পদ্ধতির বিন্দুটি কী?


10

আমি জাভাস্ক্রিপ্ট: গুড পার্টস এর মাধ্যমে পড়ছি এবং প্রোটোটাইপগুলির বিভাগটি ঘিরে আমার মাথা পেতে লড়াই করেছিলাম ।

একটু গুগলের পরে, আমি এই সিদ্ধান্তে পৌঁছেছি যে এটি বস্তুর ঘোষণার পরে বস্তুগুলিতে বৈশিষ্ট্য যুক্ত করা ।

এই স্ক্রিপ্টটি ডাব্লু 3 স্কুল থেকে উদ্ভাসিত হয়ে আমি লক্ষ্য করেছি যে প্রোটোটাইপ সম্পত্তি যুক্ত লাইনটি সরিয়ে ফেলার কোনও প্রভাব নেই । তাহলে কথাটা কী?


//Prototyping

function employee(name,jobtitle,born)
{
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
}

var fred=new employee("Fred Flintstone","Caveman",1970);
employee.prototype.salary=null; //  <---  try removing this line
fred.salary=20000;

(Fred.salary) document.write;


4
@ রায়নোস ভাল বলেছেন, তবে একটি প্রতিস্থাপনের পরামর্শও দিন, যেমন এমডিএন ডক্স: বিকাশকারী.মোজিলা.আর.ইন
জাভা স্ক্রিপ্ট

উত্তর:


13

প্রোটোটাইপ কীভাবে কাজ করে তা নয়। প্রোটোটাইপ প্রোটোটাইপ চেইনে ব্যবহৃত হয়।

আপনি যখনই কোনও বস্তুর উপর সম্পত্তি পাওয়ার চেষ্টা করবেন এটি সেই সম্পত্তি নামের জন্য এটিটি পরীক্ষা করবে। এটি উপস্থিত না থাকলে এটি প্রোটোটাইপটিতে দেখবে।

উদাহরণ:

var o = {
  "foo": "bar",
  "method": function() { ... }
};

var o2 = Object.create(o);
var o3 = Object.create(o);

console.log(o2.hasOwnProperty("foo")); // false
console.log(o2.foo); // "bar"
console.log(o2.__proto__ === o); // true
o.baz = "foobar";
console.log(o2.baz); // "foobar"

প্রোটোটাইপ এর বিন্দু হ'ল কোড পুনরায় ব্যবহার এবং উত্তরাধিকার।


ঠিক আছে, তাই আমি এখন এটি পেতে। তবে আমি গতিশীলভাবে একটি সম্পত্তি যুক্ত করার চেষ্টা করেছি, এবং এটি আমাকে বলছে prototype is undefined---o.prototype.newProp = "mutts nuts";
মাইল্ড ফাজ

3
@ মিল্ডফুজ oএকটি অবজেক্ট। .prototypeসম্পত্তি ফাংশন উপর ব্যবহার করা হয়, তা উপেক্ষা। কেবল করুনo.newProp = "mutts nuts"
রায়নোস

7

আপনি যখন fred.salary=20000বেতন বেতনটি কেবল ফ্রেডে যুক্ত করেছিলেন। প্রোটোটাইপ ব্যবহার করার সময়, আপনি তখন থেকে তৈরি করবেন এমন সমস্ত কর্মচারীর বেতনের বৈশিষ্ট্য থাকবে।

বলুন আপনার কাছে কর্মচারীর 100 টি উদাহরণ রয়েছে এবং আপনি তাদের সবার বেতনের বৈশিষ্ট্য যুক্ত করতে চেয়েছিলেন। আপনি নিজে নিজে এটি করতে পারবেন, প্রতিটি কর্মীর উপর পুনরাবৃত্তি করতে এবং এটি যুক্ত করতে পারেন। অথবা আপনি প্রোটোটাইপ ব্যবহার করতে পারেন এবং সেগুলির জন্য নির্ধারণ করতে পারেন।

প্রোটোটাইপ দরকারী যখন আপনি ইতিমধ্যে বিদ্যমান যে কোনওটির কার্যকারিতা রাখতে চান। বলুন আপনি অ্যারেতে একটি কাস্টম পদ্ধতি যুক্ত করতে চান। আপনি যেমন কিছু করবেন:

Array.prototype.my_custom_method = function() {...}

সেখান থেকে আপনার তৈরি করা সমস্ত অ্যারেতে সেই পদ্ধতিটি উপলব্ধ থাকবে।


3
আমি অবাক হয়েছি যে কেউই উল্লেখ করেনি যে এটি মেমরিটি কমিয়ে রাখতে ডিজাইন করা হয়েছে। আপনার যদি এমন জটিল কোনও অবজেক্ট বাস্তবায়নের প্রয়োজন হয় যার প্রচুর কোড থাকে তবে আপনি চান না যে কোডটি বস্তুর প্রতিটি ক্ষেত্রে পুনরাবৃত্তি করা হোক। স্পষ্টতই, প্রতিটি বৈশিষ্ট্যে ডেটা বৈশিষ্ট্যগুলি পৃথক হওয়ার সম্ভাবনা বেশি থাকে তবে আপনি সাধারণত কোডটির একটি অনুলিপি চান, তাই আপনি এটিকে প্রোটোটাইপটিতে রেখেছেন।
ডোমিনিক ক্রোনিন

1
আইএমও এটি এখন পর্যন্ত সেরা উত্তর।
মাফিন ম্যান

5

আপনি এই নিবন্ধটি একবার দেখে নিতে চাইতে পারেন ।

একটি প্রোটোটাইপ-ভিত্তিক ভাষার একটি প্রোটোটাইপিকাল অবজেক্টের ধারণা থাকে, এটি একটি টেম্পলেট হিসাবে ব্যবহৃত হয় যা থেকে কোনও নতুন অবজেক্টের জন্য প্রাথমিক বৈশিষ্ট্য পাওয়া যায়। যে কোনও অবজেক্ট তার নিজস্ব বৈশিষ্ট্য নির্দিষ্ট করতে পারে, আপনি এটি তৈরির সময় বা রান সময়ে at তদ্ব্যতীত, যে কোনও বস্তু দ্বিতীয় বস্তুর প্রথম বস্তুর বৈশিষ্ট্য ভাগ করে নেওয়ার অনুমতি দিয়ে অন্য কোনও অবজেক্টের প্রোটোটাইপ হিসাবে যুক্ত হতে পারে।

যদি আপনি কোনও বস্তুর কোনও সংস্থার প্রোটোটাইপ হিসাবে ব্যবহৃত কোনও সামগ্রীতে যুক্ত করেন তবে যে বিষয়গুলির জন্য এটি প্রোটোটাইপ হয় সেগুলিও নতুন সম্পত্তি লাভ করে।

শ্রেণিভিত্তিক ভাষাগুলির তুলনায় প্রোটোটাইপ-ভিত্তিক ভাষার এটি অন্যতম প্রধান সুবিধা।

এছাড়াও, আপনার প্রয়োজন হলে জেএসের সাথে একটি ধ্রুপদী ওও উত্তরাধিকার পাওয়া সহজ, তবে কোনও ভাষার জন্য এটি প্রোটোটাইপ-মডেল পাওয়া প্রায়শই কঠিন, যা এটি ডিফল্টরূপে প্রয়োগ করে না।


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