জাভাস্ক্রিপ্ট একটি প্রোটোটাইপ ভিত্তিক ভাষা এটির অর্থ কী?


255

জাভাস্ক্রিপ্টের একটি বড় সুবিধা হ'ল এটি একটি প্রোটোটাইপ ভিত্তিক ভাষা।

তবে জাভাস্ক্রিপ্ট প্রোটোটাইপ ভিত্তিক এর অর্থ কী এবং কেন এটি একটি সুবিধা?


3
এই উত্তর সবকিছু আপনি প্রটোটাইপ ইনহেরিটেন্স সম্পর্কে জানা প্রয়োজন ব্যাখ্যা stackoverflow.com/a/16872315/783743
Aadit এম শাহ

উত্তর:


291

প্রোটোটাইপাল উত্তরাধিকার হ'ল অবজেক্ট-ওরিয়েন্টেড কোড পুনরায় ব্যবহারের একধরণের । প্রোটোটাইপাল উত্তরাধিকার ব্যবহারের জন্য জাভাস্ক্রিপ্ট অন্যতম [মূলধারার] অবজেক্ট-ভিত্তিক ভাষা languages প্রায় সমস্ত অন্যান্য বস্তু-কেন্দ্রিক ভাষা ক্লাসিকাল।

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

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

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

সুবিধাদি

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

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


9
আরে কেলি। জাভাস্ক্রিপ্ট এখন পর্যন্ত সবচেয়ে জনপ্রিয় প্রোটোটাইপাল ভাষা হিসাবে রয়েছে, তবে আরও অনেকগুলি রয়েছে: এন.ইউইকিপিডিয়া.org
অ্যান্ড্রু হেজেস

2
আরে অ্যান্ড্রু ভাল যুক্তি. আমার আরো স্পষ্ট করা উচিত। আমি এটি একটি নোট তৈরি করব।
কেপারো


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

3
@ প্রিসোনারজেরো: আমি যুক্তি দিয়েছি যে প্রোটোটাইপাল উত্তরাধিকারটি শাস্ত্রীয়ের চেয়ে বেশি সরাসরি। বস্তু বি যে শ্রেণীর দিকে উত্তরাধিকার সূত্রে প্রাপ্ত একটি শ্রেণীর দিকে ইঙ্গিত করে তার পরিবর্তে এটি অবজেক্ট এ এর ​​দিকে সরাসরি নির্দেশ করে এবং বলে যে "আমি ঠিক সেই অবজেক্টের মতো, ব্যতীত ..." " প্রোটোটাইপাল উত্তরাধিকার সম্পর্কে বড় জিনিস এবং যে জিনিসটি বেশিরভাগ লোকের পক্ষে অভ্যন্তরীণ করা সবচেয়ে কঠিন বলে মনে হয় তা হ'ল এটি উদাহরণ থেকে প্রকারভেদকে আলাদা করে না। প্রতিটি বস্তু উভয়ই এক প্রকার এবং উদাহরণ। দুজনের মধ্যে পার্থক্য কৃত্রিম এবং ইচ্ছাকৃত, এবং সাধারণত শ্রেণিকেন্দ্রিক মানসিকতায় আটকে থাকার লক্ষণ।
সিএওও

54

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


6
খুব ভাল ব্যাখ্যা, তবে "প্রাথমিক সম্পত্তিগুলির টেমপ্লেট" সম্পর্কে মন্তব্য দিয়ে কিছুটা বিভ্রান্তিকর। আপনি যদি কোনও বস্তুর তাত্ক্ষণিকতার পরে প্রোটোটাইপ পরিবর্তন করেন তবে সেই অবজেক্টটি এখনও সেই ফাংশনগুলি গ্রহণ করে।
নিকফ

32

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


তুমি এখনও একই রকম অনুভব করো? কারণ যদি তাই হয় তবে এটিই প্রথম ব্যাখ্যা যা সত্যিই আমার সাথে কেবল দৃly়ভাবে "ক্লিক করুন"।
চাটত 3

11

সুবিধা / অসুবিধাটি হ'ল, আমরা রান টাইমে নতুন ধরণের অবজেক্ট তৈরি করতে পারি ক্লাস (স্ট্যাটিক কোড) সংজ্ঞায়নের প্রয়োজন ছাড়াই can বেশিরভাগ বৈশিষ্ট্যগুলির মতো এটি বিকাশকারীর পক্ষে এটি কোনও সুবিধা / অসুবিধায় পরিণত করা।

উপরে সম্ভব কারণ কারণ জাভা স্ক্রিপ্টে অবজেক্টগুলি মূলত ফাংশন (ক্লোজারও খুব)।


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

2
ক্লাসগুলি অগত্যা একটি স্থির কোড নয় - পাইথনটি দেখুন, যেখানে শ্রেণিগুলি নিজেরাই বস্তু এবং মেটাক্লাস থেকে তৈরি করা হয় যা বস্তুও।
টমাসজ জিয়েলসিস্কি

6

শ্রেণি কাঠামো ঘোষণার পরিবর্তে আপনি একই ধরণের অবজেক্ট তৈরি করতে পারেন এবং যে কোনও সময় আপনি যখন অবজেক্টের প্রোটোটাইপ ব্যবহার করতে চান তখন তাদের সংজ্ঞা যুক্ত করতে পারেন। এটি জিনিস করার স্বাভাবিক পদ্ধতির চেয়ে আরও নমনীয়।


6

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

myobject.prototype=unkownobject;
myobject.newproperty=1;

আপনি যে কোনও জায়গা থেকে অবজেক্টটি পেতে পারেন; আপনার নিজস্ব কোড, নেটওয়ার্ক থেকে, ডাটাবেস থেকে, বাহ্যিক সংযোগ থেকে এবং আরও অনেক কিছু।

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


6

সমস্ত উত্তর পড়ার পরে এটি উপসংহার

1) উত্তরাধিকার যেখানে বস্তুগুলি অন্য বস্তু থেকে সরাসরি উত্তরাধিকার সূত্রে প্রাপ্ত হয়

2) এটি ক্লাস ব্যবহার করে না

3) এছাড়াও উদাহরণ ভিত্তিক প্রোগ্রামিং বা ক্লাসহীন প্রোটোটাইপ ওরিয়েন্টেড প্রোগ্রামিং বলা হয়

4) আচরণ পুনর্ব্যবহার প্রোটোটাইপ হিসাবে পরিবেশন বিদ্যমান বস্তু ক্লোনিং দ্বারা সম্পাদিত হয়

5) নতুন অবজেক্ট থেকে টেমপ্লেট হিসাবে ব্যবহৃত অবজেক্টটি প্রাথমিক বৈশিষ্ট্য পান

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