আমি যদি সঠিকভাবে বুঝতে পারি তবে জাভাস্ক্রিপ্টের প্রতিটি এবং অবজেক্ট প্রোটোটাইপ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত
এটি বিভক্ত চুলের মতো মনে হতে পারে তবে জাভাস্ক্রিপ্টের (ইসকামস্ক্রিপ্ট প্রয়োগের জেনেরিক শব্দ) এবং এর মধ্যে পার্থক্য রয়েছে ECMAScript (জাভাস্ক্রিপ্ট প্রয়োগের জন্য ব্যবহৃত ভাষা । এটি ECMAScript যা জাভাস্ক্রিপ্ট নয়, একটি উত্তরাধিকারের স্কিমকে সংজ্ঞায়িত করে, সুতরাং কেবল দেশীয় ECMAScript অবজেক্টগুলিকে সেই উত্তরাধিকার প্রকল্পটি বাস্তবায়ন করতে হবে।
একটি চলমান জাভাস্ক্রিপ্ট প্রোগ্রাম অন্তত অন্তর্নির্মিত E ECMAScript অবজেক্ট (অবজেক্ট, ফাংশন, সংখ্যা, ইত্যাদি) এবং সম্ভবত কিছু নেটিভ অবজেক্ট (যেমন ফাংশন) নিয়ে গঠিত consists এটিতে কিছু হোস্ট অবজেক্ট (যেমন ব্রাউজারে DOM অবজেক্টস, বা অন্যান্য হোস্ট এনভায়রনমেন্টের অন্যান্য অবজেক্ট) থাকতে পারে।
বিল্ট-ইন এবং নেটিভ অবজেক্টস অবশ্যই অবশ্যই ইসিএমএ-262 এ সংজ্ঞায়িত উত্তরাধিকার স্কিমটি বাস্তবায়ন করবে, হোস্ট বস্তুগুলি তা করে না। অতএব, একটি জাভাস্ক্রিপ্ট পরিবেশে সমস্ত বস্তুর অবশ্যই অবজেক্ট.প্রোটোটাইপ থেকে উত্তরাধিকারী হতে হবে না । উদাহরণস্বরূপ, Internet Explorer এ হোস্ট বস্তু বাস্তবায়িত যেমন জন্য ActiveX যদি নেটিভ বস্তু (অত: পর কেন হিসাবে গণ্য বস্তু ত্রুটি নিক্ষেপ করা হবে try..catch মাইক্রোসফট ইনিশিয়ালাইজ করতে ব্যবহৃত হয় XMLHttpRequest- এর বস্তু)। কিছু ডিওএম অবজেক্টস (যেমন কুইর্কস মোডে ইন্টারনেট এক্সপ্লোরারে নোডলিস্টস) যদি অ্যারে পদ্ধতিতে পাস করা হয় তবে ত্রুটি ছুঁড়ে ফেলা হবে, ইন্টারনেট এক্সপ্লোরার 8 এবং নিম্নের ডিওএম অবজেক্টগুলির নেই ইসিএমএস স্ক্রিপ্ট inherit যেমন উত্তরাধিকার প্রকল্পের মতো নয়, ইত্যাদি।
সুতরাং এটি ধরে নেওয়া উচিত নয় যে একটি জাভাস্ক্রিপ্ট পরিবেশে সমস্ত বস্তু অবজেক্ট.প্রোটোটাইপ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত।
যার অর্থ জাভাস্ক্রিপ্টের প্রতিটি বস্তুর প্রোটোটাইপ চেইনের মাধ্যমে haswwPPererty ফাংশনে অ্যাক্সেস রয়েছে
কমপক্ষে ইন্টারনেট এক্সপ্লোরারে নির্দিষ্ট হোস্ট অবজেক্টের জন্য সত্য নয় (এবং ইন্টারনেট এক্সপ্লোরার 8 এবং সর্বদা কম)।
উপরের দিক থেকে, কেন চিন্তা করা মূল্যবান যে কোনও জিনিসের নিজস্ব নিজস্ব ওজনপ্রোপার্টি পদ্ধতি থাকতে পারে এবং যদি এটি কোনও ভাল ধারণা হয় বা না হয় তবে প্রথমে পরীক্ষা না করেই কিছু অন্য has'wnProperty পদ্ধতি কল করার পরামর্শ দেওয়া উচিত ।
আমি সন্দেহ করি যে ব্যবহার করার কারণটি Object.prototype.hasOwnProperty.call
হ'ল কিছু ব্রাউজারে, হোস্ট অবজেক্টের কল ব্যবহার করে একটি হ'ল ওপেনপ্র্টি পদ্ধতি নেই don't এবং বিল্ট বিকল্প is যাইহোক, সাধারণভাবে এটি করা উপরে উল্লিখিত কারণগুলির জন্য ভাল ধারণা বলে মনে হচ্ছে না।
কোথায় হোস্ট বস্তু উদ্বিগ্ন, এ অপারেটর বৈশিষ্ট্যের জন্য পরীক্ষা সাধারণত ব্যবহার করা যেতে পারে, যেমন
var o = document.getElementsByTagName('foo');
o.hasOwnProperty('bar');
('bar' in o);
Object.prototype.hasOwnProperty.call(o, 'bar');
একটি বিকল্প ( ইন্টারনেট এক্সপ্লোরার 6 এবং অন্যান্যতে পরীক্ষিত ):
function ownProp(o, prop) {
if ('hasOwnProperty' in o) {
return o.hasOwnProperty(prop);
} else {
return Object.prototype.hasOwnProperty.call(o, prop);
}
}
এইভাবে আপনি কেবলমাত্র বিল্ট-কে হ্যাঁসনপ্রপার্টিটিতে কল করবেন যেখানে বস্তুর এটি নেই (উত্তরাধিকারসূত্রে বা অন্যথায়)।
যাইহোক, যদি একটি বস্তু একটি নেই hasOwnProperty
পদ্ধতি, এটা সম্ভবত ঠিক যেমন উপযুক্ত ব্যবহার করবেন তা এ যেমন বস্তুর সম্ভবত একটি উত্তরাধিকার পরিকল্পনা নেই এবং সব সম্পত্তি বস্তুর উপর হয় (শুধু একটি ধৃষ্টতা যদিও যে) অপারেটর, যেমন মধ্যে অপারেটর একটি সাধারণ (এবং আপাতদৃষ্টিতে সফল) বৈশিষ্ট্যের জন্য করে DOM অবজেক্ট সমর্থনের জন্য পরীক্ষার উপায়।