प्रश्न पहले से ही उत्तर दिया गया लगता है, लेकिन ओपी उसी तरह की वस्तु और वस्तु तक पहुंचना चाहता है, जैसे हम जावा में करते हैं और चयनित उत्तर पर्याप्त नहीं है।
निम्नलिखित स्पष्टीकरण के साथ, हम किसी वस्तु का एक वर्ग प्राप्त कर सकते हैं (इसे वास्तव में जावास्क्रिप्ट में प्रोटोटाइप कहा जाता है)।
var arr = new Array('red', 'green', 'blue');
var arr2 = new Array('white', 'black', 'orange');
आप इस तरह से एक संपत्ति जोड़ सकते हैं:
Object.defineProperty(arr,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
लेकिन .last
संपत्ति केवल ' arr
' ऑब्जेक्ट के लिए उपलब्ध होगी जो कि ऐरे प्रोटोटाइप से तुरंत ली गई है। इसलिए, .last
एरे प्रोटोटाइप से तात्कालिक रूप से सभी वस्तुओं के लिए संपत्ति उपलब्ध होने के लिए, हमें .last
ऐरे प्रोटोटाइप के लिए संपत्ति को परिभाषित करना होगा :
Object.defineProperty(Array.prototype,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
यहाँ समस्या यह है, आपको यह जानना होगा कि ' arr
' और ' arr2
' वेरिएबल्स किस ऑब्जेक्ट प्रकार (प्रोटोटाइप) के हैं ! दूसरे शब्दों में, यदि आप ' arr
' ऑब्जेक्ट ' ' के वर्ग प्रकार (प्रोटोटाइप) को नहीं जानते हैं , तो आप उनके लिए कोई संपत्ति परिभाषित नहीं कर पाएंगे। उपरोक्त उदाहरण में, हम जानते हैं कि गिरफ्तारी सरणी वस्तु का उदाहरण है, इसीलिए हमने Array.prototype का उपयोग एक संपत्ति को परिभाषित करने के लिए किया है। लेकिन क्या होगा अगर हम ' arr
' के वर्ग (प्रोटोटाइप) को नहीं जानते हैं ?
Object.defineProperty(arr.__proto__,'last2', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
जैसा कि आप देख सकते हैं, बिना यह जाने कि ' arr
' एक ऐरे है, हम एक नई प्रॉपर्टी जोड़ सकते हैं जो ' arr
' का उपयोग करके ' arr.__proto__
' की क्लास को संदर्भित करता है ।
हमने arr
यह जाने बिना कि यह ऐरे की एक मिसाल है , ' ' के प्रोटोटाइप को एक्सेस किया और मुझे लगता है कि ओपी ने यही पूछा है।