यह टकराव से बचने के लिए है - सामान्यतः, उन वस्तुओं के साथ समस्याएं जिनके पास आपकी अपेक्षा की जाने वाली कीमत नहीं है।
जेएस में ऑब्जेक्ट्स अक्सर कुंजी-मूल्य-मानचित्र के रूप में उपयोग किए जाते हैं, और चाबियाँ मनमाने ढंग से तार हो सकती हैं - उदाहरण के लिए __defineGetter__
, hasOwnProperty
या कुछ कम विशेष। अब जब आप किसी अज्ञात ऑब्जेक्ट पर ऐसे फ़ंक्शन का आह्वान करना चाहते हैं - जैसे hasOwnProperty
अक्सर सामान्य गणना कार्यों में उपयोग किया जाता है, जहां कोई JSON पारित किया जा सकता है - आप कभी भी यह सुनिश्चित नहीं कर सकते कि क्या आपको ओवरराइट की गई संपत्ति मिली है (जो शायद फ़ंक्शन) या मूल जो आप चाहते हैं, या ऑब्जेक्ट को संपत्ति को विरासत में मिला है या नहीं। इस समस्या से बचने के लिए (या this IE bug), आपको Object.prototype.hasOwnProperty.call
का उपयोग करना होगा - वह बदसूरत है।
तो, Object
पर उन सभी कार्यों को नामित करना केवल उपयोगी है, यह एक क्लीनर एपीआई है जो प्रतिबिंब विधियों को ऑब्जेक्ट के एप्लिकेशन इंटरफ़ेस से अलग करता है। यह ऑप्टिमाइज़ेशन (स्थिर विश्लेषण को सरल बनाना) में मदद करता है और सैंडबॉक्स में प्रतिबिंब एपीआई तक पहुंच को प्रतिबंधित करना आसान बनाता है - कम से कम design idea।
आपको प्रोटोटाइप में defineProperty
होने से प्रसन्नता हो सकती है, लेकिन आप ज्ञात वस्तुओं के साथ काम करते समय केवल सुरक्षित रूप से इसका उपयोग कर सकते हैं। आप अभी भी इसे चाहते हैं (जैसा कि आप जब उपयोग करने के लिए जानते हैं और जब नहीं), आप इस्तेमाल कर सकते हैं
Object.defineProperty(Object.prototype, "defineProperty", {
writable: true,
enumberable: false,
value: function(prop, descr) {
return Object.defineProperty(this, prop, descr);
}
});
निकट से संबंधित: [क्यों ES5 वस्तु तरीकों नहीं जोड़ा गया था Object.prototype के लिए?] (http: // stackoverflow। कॉम/क्यू/9735026/1048572) – Bergi