শাস্ত্রীয় উত্তরাধিকার বনাম প্রোটোটাইপাল উত্তরাধিকার জাভাস্ক্রিপ্টে


119

আমি অনেকগুলি লিঙ্ক গুগল করেছি এবং শাস্ত্রীয় উত্তরাধিকার এবং প্রোটোটাইপাল উত্তরাধিকারের মধ্যে পার্থক্য সম্পর্কে ভাল ধারণা পেতে পারি না?

আমি এগুলি থেকে কিছু জিনিস শিখেছি কিন্তু আমি এখনও ধারণাগুলি সম্পর্কে বিভ্রান্ত।

শাস্ত্রীয় উত্তরাধিকার

// Shape - superclass
function Shape() {
  this.x = 0;
  this.y = 0;
}

//superclass method
Shape.prototype.move = function(x, y) {
    this.x += x;
    this.y += y;
    console.info("Shape moved.");
};

// Rectangle - subclass
function Rectangle() {
  Shape.call(this); //call super constructor.
}

//subclass extends superclass
Rectangle.prototype = Object.create(Shape.prototype);

শাস্ত্রীয় উত্তরাধিকার কি অভ্যন্তরের প্রোটোটাইপাল উত্তরাধিকার ব্যবহার করে?

http://aaditmshah.github.io/why-prototypal-inheritance-matters/

উপরের লিঙ্কটি থেকে, আমি শিখেছি আমরা শাস্ত্রীয় উত্তরাধিকারে রান সময়ে নতুন পদ্ধতি যুক্ত করতে পারি না । এটা কি সঠিক? তবে আপনি উপরের কোডটি চেক করতে পারেন আমি প্রোটোটাইপের মাধ্যমে রান চলাকালীন "মুভ" পদ্ধতি এবং যে কোনও পদ্ধতি যুক্ত করতে পারি । তাহলে এটি কি প্রোটোটাইপ ভিত্তিক শাস্ত্রীয় উত্তরাধিকার? যদি তা হয় তবে প্রকৃত শাস্ত্রীয় উত্তরাধিকার এবং প্রোটোটাইপ উত্তরাধিকার কী? আমি এটি সম্পর্কে বিভ্রান্ত।

প্রোটোটাইপাল উত্তরাধিকার।

function Circle(radius) {
    this.radius = radius;
}
Circle.prototype.area = function () {
    var radius = this.radius;
    return Math.PI * radius * radius;
};
Circle.prototype.circumference: function () {
    return 2 * Math.PI * this.radius;
};
var circle = new Circle(5);
var circle2 = new Circle(10);

এটি কি শাস্ত্রীয় উত্তরাধিকারের মতো? প্রোটোটাইপাল উত্তরাধিকার কি সম্পর্কে আমি সম্পূর্ণ বিভ্রান্ত? শাস্ত্রীয় উত্তরাধিকার কী? শাস্ত্রীয় উত্তরাধিকার কেন খারাপ?

এগুলি সহজ পদ্ধতিতে আরও ভাল করে বোঝার জন্য আপনি কি আমাকে একটি সাধারণ উদাহরণ দিতে পারেন?

ধন্যবাদ,

শিব


সদৃশ, এই চেক আউট: stackoverflow.com/questions/1595611/...
Silviu Burcea

5
নিশ্চিত না তুমি এখানে কি সম্পর্কে এ আছি - প্রথম কোড ব্লক হয় prototypical এর উত্তরাধিকার, ধ্রুপদী না। আপনার কোডের দ্বিতীয় ব্লকের কোনও উত্তরাধিকার নেই!
Alnitak


@ এলনাইটাক ডেভেলপার.মোজিলা.আর.ইন- ইউএস / ডকস / ওয়েবে / জাভা স্ক্রিপ্ট / রেফারেন্স / this এই লিঙ্কটি জানায় যে একটিটি ধ্রুপদী উত্তরাধিকার ছিল। thats কেন বিভ্রান্ত।
শিবরাজিনী

আপনি কেন শাস্ত্রীয় উত্তরাধিকার এড়াতে চাইতে পারেন সে সম্পর্কে আরও তথ্যের জন্য, আমার আলাপ দেখুন, "ধ্রুপদী উত্তরাধিকারটি অপ্রচলিত: প্রোটোটাইপাল ওওতে
এরিক এলিয়ট

উত্তর:


249

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

                                   Inheritance
                                        |
                         +-----------------------------+
                         |                             |
                         v                             v
                    Prototypal                     Classical
                         |
         +------------------------------+
         |                              |
         v                              v
Prototypal Pattern             Constructor Pattern

আপনি দেখতে পারেন প্রোটোটাইপাল উত্তরাধিকার এবং শাস্ত্রীয় উত্তরাধিকার হ'ল উত্তরাধিকারের দুটি পৃথক দৃষ্টান্ত। কিছু ভাষা যেমন স্ব, লুয়া এবং জাভাস্ক্রিপ্ট প্রোটোটাইপাল উত্তরাধিকারকে সমর্থন করে। তবে বেশিরভাগ ভাষা যেমন সি ++, জাভা এবং সি # ধ্রুপদী উত্তরাধিকারকে সমর্থন করে।


অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের একটি দ্রুত ওভারভিউ

প্রোটোটাইপাল উত্তরাধিকার এবং শাস্ত্রীয় উত্তরাধিকার উভয়ই অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং প্যারাডিজম (যেমন তারা বস্তুর সাথে লেনদেন করে)। অবজেক্টগুলি কেবল বিমূর্ততা যা সত্যিকারের বিশ্ব সত্তার বৈশিষ্ট্যগুলিকে আবদ্ধ করে (যেমন তারা প্রোগ্রামে সত্যিকারের শব্দগুলির প্রতিনিধিত্ব করে)। এটি বিমূর্ততা হিসাবে পরিচিত।

বিমূর্ততা: কম্পিউটার প্রোগ্রামগুলিতে বাস্তব বিশ্বের বিষয়গুলির প্রতিনিধিত্ব।

তাত্ত্বিকভাবে একটি বিমূর্ততা "নির্দিষ্ট উদাহরণগুলি থেকে সাধারণ বৈশিষ্ট্যগুলি বের করে একটি সাধারণ ধারণা" হিসাবে সংজ্ঞায়িত করা হয়। তবে এই ব্যাখ্যার খাতিরে আমরা এর পরিবর্তে পূর্বোক্ত সংজ্ঞাটি ব্যবহার করব।

এখন কিছু বস্তুর প্রচুর জিনিস প্রচলিত রয়েছে। উদাহরণস্বরূপ একটি মাটির বাইক এবং হারলে ডেভিডসনের মধ্যে প্রচুর মিল রয়েছে।

একটি মাটির বাইক:

একটা মাটির বাইক।

একটি হারলে ডেভিডসন:

একটি হারলে ডেভিডসন

একটি মাটির বাইক এবং একটি হার্লি ডেভিডসন উভয় বাইক। সুতরাং বাইকটি একটি কাদামাটি বাইক এবং হারলে ডেভিডসন উভয়েরই সাধারণীকরণ।

                   Bike
                     |
    +---------------------------------+
    |                                 |
    v                                 v
Mud Bike                       Harley Davidson

উপরের উদাহরণে বাইক, মাটির বাইক এবং হারলে ডেভিডসন সমস্ত বিমূর্ততা। তবে বাইকটি কাদা বাইকের আরও সাধারণ বিমূর্ততা এবং হারলে ডেভিডসন (অর্থাত্ মাটির বাইক এবং হারলে ডেভিডসন উভয়ই নির্দিষ্ট ধরণের বাইক)।

জেনারালাইজেশন: আরও নির্দিষ্ট বিমূর্ততার একটি বিমূর্ততা।

অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ে আমরা অবজেক্ট তৈরি করি (যা বাস্তব বিশ্বের সত্তার বিমূর্ততা) এবং আমরা এই বিষয়গুলির সাধারণীকরণ তৈরি করতে ক্লাস বা প্রোটোটাইপগুলি ব্যবহার করি। জেনারালাইজেশনগুলি উত্তরাধিকারের মাধ্যমে তৈরি করা হয়। একটি বাইক একটি কাদা বাইকের একটি সাধারণীকরণ। সুতরাং মাটির বাইকগুলি বাইক থেকে উত্তরাধিকার সূত্রে প্রাপ্ত।


ক্লাসিকাল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং

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

+----------------------+----------------+---------------------------------------+
| Level of Abstraction | Name of Entity |                Comments               |
+----------------------+----------------+---------------------------------------+
| 0                    | John Doe       | Real World Entity.                    |
| 1                    | johnDoe        | Variable holding object.              |
| 2                    | Man            | Class of object johnDoe.              |
| 3                    | Human          | Superclass of class Man.              |
+----------------------+----------------+---------------------------------------+

আপনি যেমন ক্লাসিকাল অবজেক্ট-ভিত্তিক প্রোগ্রামিং ল্যাঙ্গুয়েজগুলিতে দেখতে পাচ্ছেন বস্তুগুলি কেবল বিমূর্ততা (অর্থাত্ সমস্ত বস্তুর বিমূর্ত স্তর 1 রয়েছে) এবং শ্রেণিগুলি কেবলমাত্র সাধারণীকরণ (অর্থাত্ সমস্ত শ্রেণীর বিমূর্ত স্তর 1 এর চেয়ে বেশি থাকে)।

শাস্ত্রীয় অবজেক্ট-ভিত্তিক প্রোগ্রামিং ভাষাগুলিতে অবজেক্টগুলি কেবল ক্লাস ইনস্ট্যান্ট করে তৈরি করা যেতে পারে:

class Human {
    // ...
}

class Man extends Human {
    // ...
}

Man johnDoe = new Man();

ক্লাসিকাল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজে সংক্ষেপে বস্তুগুলি বাস্তব বিশ্বের সত্তার বিমূর্ততা এবং শ্রেণিগুলি সাধারণীকরণ হয় (অর্থাত্ বস্তু বা অন্যান্য শ্রেণীর বিমূর্ততা)।

সুতরাং বিমূর্তির স্তর বাড়ার সাথে সাথে সত্তা আরও সাধারণ হয়ে ওঠে এবং বিমূর্ততার স্তর হ্রাস পাওয়ার সাথে সাথে সত্তা আরও নির্দিষ্ট হয়ে যায়। এই অর্থে বিমূর্তির স্তরটি আরও নির্দিষ্ট সত্তা থেকে আরও সাধারণ সত্তা পর্যন্ত স্কেলগুলির সাথে সমতুল্য।


প্রোটোটাইপাল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং

প্রোটোটাইপাল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি ক্লাসিকাল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজের চেয়ে অনেক সহজ কারণ প্রোটোটাইপাল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ে আমাদের কেবল এক প্রকার বিমূর্ততা থাকে (অর্থাত্ অবজেক্টস)। উদাহরণস্বরূপ, বিবেচনা করুন:

+----------------------+----------------+---------------------------------------+
| Level of Abstraction | Name of Entity |                Comments               |
+----------------------+----------------+---------------------------------------+
| 0                    | John Doe       | Real World Entity.                    |
| 1                    | johnDoe        | Variable holding object.              |
| 2                    | man            | Prototype of object johnDoe.          |
| 3                    | human          | Prototype of object man.              |
+----------------------+----------------+---------------------------------------+

যেমন আপনি প্রোটোটাইপাল অবজেক্ট-ভিত্তিক প্রোগ্রামিং ল্যাঙ্গুয়েজগুলিতে দেখতে পাচ্ছেন হ'ল বাস্তব জগতের সত্তা (যার ক্ষেত্রে এগুলিকে কেবল অবজেক্ট বলা হয়) বা অন্যান্য অবজেক্টের (যে ক্ষেত্রে এগুলিকে বিমূর্ত করা হয় সেগুলির প্রোটোটাইপ বলা হয়) ab সুতরাং একটি প্রোটোটাইপ হ'ল একটি সাধারণীকরণ।

প্রোটোটাইপাল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজে অবজেক্টগুলি প্রাক্তন নিহিলো তৈরি করা যেতে পারে (অর্থাত্ কিছুই নয়) বা অন্য কোনও বস্তু থেকে (যা সদ্য নির্মিত বস্তুর প্রোটোটাইপ হয়ে ওঠে):

var human = {};
var man = Object.create(human);
var johnDoe = Object.create(man);

আমার বিনীত মতে প্রোটোটাইপাল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি ক্লাসিকাল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষার চেয়ে বেশি শক্তিশালী কারণ:

  1. বিমূর্ততা কেবল এক ধরণের।
  2. সাধারণীকরণগুলি কেবল অবজেক্ট are

এতক্ষণে আপনি অবশ্যই শাস্ত্রীয় উত্তরাধিকার এবং প্রোটোটাইপাল উত্তরাধিকারের মধ্যে পার্থক্য বুঝতে পেরেছেন। শাস্ত্রীয় উত্তরাধিকার অন্যান্য শ্রেণি থেকে উত্তরাধিকার সূত্রে ক্লাসে সীমাবদ্ধ। তবে প্রোটোটাইপাল উত্তরাধিকারের মধ্যে কেবল প্রোটোটাইপগুলি অন্যান্য প্রোটোটাইপগুলি থেকে উত্তরাধিকার সূত্রে অন্তর্ভুক্ত থাকে না তবে প্রোটোটাইপগুলি থেকে উত্তরাধিকারসূত্রে প্রাপ্ত বিষয়গুলিও অন্তর্ভুক্ত থাকে।


প্রোটোটাইপ-শ্রেণীর আইসোমরফিজম

আপনি অবশ্যই লক্ষ্য করেছেন যে প্রোটোটাইপ এবং ক্লাসগুলি খুব একই রকম। সেটা সত্য. তারা হয়। বাস্তবে এগুলি এতটাই সমান যে আপনি প্রকৃতপক্ষে মডেল ক্লাসগুলিতে প্রোটোটাইপগুলি ব্যবহার করতে পারেন:

function CLASS(base, body) {
    if (arguments.length < 2) body = base, base = Object.prototype;
    var prototype = Object.create(base, {new: {value: create}});
    return body.call(prototype, base), prototype;

    function create() {
        var self = Object.create(prototype);
        return prototype.hasOwnProperty("constructor") &&
            prototype.constructor.apply(self, arguments), self;
    }
}

উপরের CLASSফাংশনটি ব্যবহার করে আপনি প্রোটোটাইপগুলি তৈরি করতে পারেন যা ক্লাসগুলির মতো দেখাচ্ছে:

var Human = CLASS(function () {
    var milliseconds = 1
      , seconds      = 1000 * milliseconds
      , minutes      = 60 * seconds
      , hours        = 60 * minutes
      , days         = 24 * hours
      , years        = 365.2425 * days;

    this.constructor = function (name, sex, dob) {
        this.name = name;
        this.sex = sex;
        this.dob = dob;
    };

    this.age = function () {
        return Math.floor((new Date - this.dob) / years);
    };
});

var Man = CLASS(Human, function (Human) {
    this.constructor = function (name, dob) {
        Human.constructor.call(this, name, "male", dob);
        if (this.age() < 18) throw new Error(name + " is a boy, not a man!");
    };
});

var johnDoe = Man.new("John Doe", new Date(1970, 0, 1));

বিপরীতটি অবশ্য সত্য নয় (যেমন আপনি প্রোটোটাইপগুলির মডেল করতে ক্লাস ব্যবহার করতে পারবেন না)। এটি কারণ প্রোটোটাইপগুলি বস্তু তবে শ্রেণিগুলি বস্তু নয়। এগুলি বিমূর্ততার সম্পূর্ণ ভিন্ন ধরণের।


উপসংহার

সংক্ষেপে আমরা শিখেছি যে বিমূর্ততা হ'ল "নির্দিষ্ট উদাহরণগুলি থেকে সাধারণ বৈশিষ্ট্যগুলি বের করে একটি সাধারণ ধারণা" এবং সেই সাধারণীকরণটি "আরও নির্দিষ্ট বিমূর্তির বিমূর্ততা" । প্রোটোটাইপাল এবং শাস্ত্রীয় উত্তরাধিকারের মধ্যে পার্থক্য সম্পর্কে এবং আমরা কীভাবে উভয়ই একই মুদ্রার দুটি মুখ হিসাবে শিখেছি।

বিভাজক নোটে আমি মন্তব্য করতে চাই যে প্রোটোটাইপাল উত্তরাধিকারের দুটি ধরণ রয়েছে: প্রোটোটাইপাল প্যাটার্ন এবং কনস্ট্রাক্টরের ধরণ। প্রোটোটাইপাল প্যাটার্ন হ'ল প্রোটোটাইপাল উত্তরাধিকারের নীতিগত প্যাটার্ন যেখানে কনস্ট্রাক্টর প্যাটার্নটি প্রোটোটাইপাল উত্তরাধিকারটিকে আরও ধ্রুপদী উত্তরাধিকারের মতো দেখতে তৈরি করতে ব্যবহৃত হয়। ব্যক্তিগতভাবে আমি প্রোটোটাইপাল প্যাটার্নটি পছন্দ করি।

পিএস আমি সেই ব্যক্তি যিনি " কেন প্রোটোটাইপাল ইনহেরিটেন্স ম্যাটারস " ব্লগ পোস্ট লিখেছিলেন এবং " ক্লাসিকালের চেয়ে প্রোটোটাইপাল উত্তরাধিকারের সুবিধা? " প্রশ্নের উত্তর দিয়েছেন । আমার উত্তরটি স্বীকৃত উত্তর।


2
আপনার দুর্দান্ত উত্তরের জন্য ধন্যবাদ আমার বুঝতে হবে প্রোটোটাইপাল প্যাটার্নটি কনস্ট্রাক্টর প্যাটার্নের সাথে কীভাবে আরও ভাল তুলনা করা যায়? কোনও উদাহরণ?
শিবরাজিনী

1
আমি আমার ব্লগে কনস্ট্রাক্টর বনাম প্রোটোটাইপ সম্পর্কে তুলনামূলক সমালোচনা লিখেছি: aaditmshah.github.io/why-prototypal-inheritance-matters/…
অদিত এম শাহ

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

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

5
@ স্বনিধি নং এটি এখনও প্রোটোটাইপাল। জাভাস্ক্রিপ্টের "ক্লাস" নেই এবং তাই জাভাস্ক্রিপ্টে নির্মাণকারী সহ ক্লাসিকাল কিছুই নেই। এটি এখনও প্রোটোটাইপাল উত্তরাধিকার। প্রোটোটাইপাল উত্তরাধিকারের একটি অদ্ভুত রূপ যা মানুষ ধ্রুপদী উত্তরাধিকার নিয়ে বিভ্রান্ত করে। সংক্ষিপ্ত ইন, , programming with classes = classical inheritance, ।programming with prototypes = prototypal inheritance programming with constructors = weird form of prototypal inheritance that looks a lot like classical inheritanceআশা করি বিষয়গুলি স্পষ্ট করে দেয়।
অদিত এম শাহ

8

উত্তরাধিকারে লাফ দেওয়ার আগে, আমরা জাভাস্ক্রিপ্টে উদাহরণ (বস্তু) তৈরি করতে দুটি প্রাথমিক মডেলের দিকে একবার নজর দেব :

ধ্রুপদী মডেল: অবজেক্টটি একটি ব্লুপ্রিন্ট (শ্রেণি) থেকে তৈরি করা হয়েছে

class Person {
  fn() {...}
} // or constructor function say, function Person() {}

// create instance
let person = new Person();

প্রোটোটাইপাল মডেল: অবজেক্টটি অন্য কোনও অবজেক্ট থেকে সরাসরি তৈরি হয়।

// base object
let Person = { fn(){...} }

// instance
let person = Object.create(Person);

উভয় ক্ষেত্রেই, উত্তরাধিকার * প্রোটোটাইপ অবজেক্ট ব্যবহার করে অবজেক্টকে লিঙ্ক করে অর্জন করা হয়।

(* বেস ক্লাসের পদ্ধতিগুলি প্রোটোটাইপ অবজেক্টের মাধ্যমে উত্পন্ন ক্লাসের মাধ্যমে অ্যাক্সেসযোগ্য এবং উদ্ভূত শ্রেণিতে স্পষ্টভাবে উপস্থিত হওয়ার প্রয়োজন নেই))

আরও ভালভাবে বুঝতে এখানে একটি ভাল ব্যাখ্যা দেওয়া হয়েছে ( http://www.objectplayground.com/ )


0

একটি কুকুর একটি প্রাণী। সুজানা কুকুর। শাস্ত্রীয় উত্তরাধিকারে, Animalএকটি বর্গ হয়, Dogএর একটি উপশ্রেণী Animal, এবং suzannaএটি একটি এর উদাহরণ Dog

প্রোটোটাইপাল উত্তরাধিকারে, কোনও শ্রেণি নেই। আপনার একটি আছে animal, যা একটি অবজেক্ট। এ dogহ'ল আরেকটি অবজেক্ট, যা ক্লোন করে এবং প্রসারিত করে animal(প্রোটোটাইপ অবজেক্ট)। suzannaএকটি তৃতীয় অবজেক্ট, যা অনুলিপি করে এবং প্রসারিত করে dog

let animal = {hasChlorophyl: false};

let dog = Object.create(animal);
Object.assign(dog, {
  speak() {
    console.log("Woof!");
  }
});

let suzanna = Object.create(dog);
Object.assign(suzanna, {
  name: "Suzanna"
});

suzanna.speak();

আপনি যদি এর Dogপরিবর্তে লিখেন dog, বিশেষত যদি আপনি Dogকোনওরকম "কনস্ট্রাক্টর" ফাংশন করেন তবে আপনি প্রোটোটাইপাল উত্তরাধিকার করছেন না; আপনি (ছদ্ম-) শাস্ত্রীয় উত্তরাধিকার করছেন । আপনি এটি Object.create()অর্জন করতে ব্যবহার করছেন তার অর্থ এই নয় যে আপনি প্রোটোটাইপাল উত্তরাধিকার করছেন।

আসলে, জাভাস্ক্রিপ্ট কেবল প্রোটোটাইপাল উত্তরাধিকারকে সমর্থন করে। প্রোটোটাইপাল উত্তরাধিকারটিকে (সিউডো-) ধ্রুপদী উত্তরাধিকারের মতো দেখানোর জন্য বিভ্রান্তিকর newঅপারেটর এবং .prototypeবৈশিষ্ট্য রয়েছে।

ডগলাস ক্রকফোর্ড তাঁর "জাভাস্ক্রিপ্ট: দ্য গুড পার্টস" বইয়ের দৈর্ঘ্যে এটি আবিষ্কার করেছেন।

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