यह अक्सर कहा जाता है कि हर जावास्क्रिप्ट वस्तु एक prototype
संपत्ति है, लेकिन मुझे लगता है foo.prototype
एक मूल्य केवल तभी foo
एक समारोह है है।ऐसा कहा जाता है कि सभी जावास्क्रिप्ट ऑब्जेक्ट्स में प्रोटोटाइप प्रॉपर्टी होती है, लेकिन अगर फू एक फ़ंक्शन है तो मुझे केवल foo.prototype दिखाई देता है?
क्रोम और फ़ायरफ़ॉक्स पर, obj.__proto__
का मूल्य है - क्या यह कहा गया है prototype
संपत्ति? लेकिन आईई 9 पर, यह काम नहीं करेगा (क्या कोई तरीका है जो कर सकता है?), और मैंने prototype
संपत्ति द्वारा सोचा, इसका मतलब है कि obj.prototype
काम करना चाहिए?
मुझे लगता है कि Object.getPrototypeOf(obj)
यह prototype
संपत्ति दिखाना प्रतीत होता है, लेकिन इसे पाने के लिए एक विशेष विधि की आवश्यकता क्यों है? person.name
की तरह क्यों नहीं, name
person
ऑब्जेक्ट की संपत्ति प्राप्त करने के लिए है?
अपडेट: (इस विधि में प्रो जावास्क्रिप्ट है: वैसे, obj.constructor.prototype
लगता है कभी कभी कि प्रोटोटाइप हो, लेकिन कभी कभी नहीं, निम्नलिखित कोड कोई निर्माता के साथ मूलरूप विरासत के साथ किया के रूप में हार्मेस और Diaz द्वारा डिजाइन पैटर्न पुस्तक अप्रेस 2008 तक, पी। 46)
var Person = {
name: 'default value',
getName: function() {
return this.name;
}
}
var reader = clone(Person);
console.log(reader.getName());
reader.name = "Ang Lee";
console.log(reader.getName());
function clone(obj) {
function F() {};
F.prototype = obj;
return new F;
}
console.log("the prototype of reader is", Object.getPrototypeOf(reader));
console.log(Object.getPrototypeOf(reader) === reader.constructor.prototype);
console.log(Object.getPrototypeOf(reader) == reader.constructor.prototype);
console.log(Object.getPrototypeOf(reader) === reader.__proto__);
console.log(Object.getPrototypeOf(reader) == reader.__proto__);
परिणाम, झूठी झूठी, सच है, पिछले 4 लाइनों के लिए सच दिखाई देगा।
ऑब्जेक्ट्स सभी प्रोटोटाइप से संबंधित हैं, लेकिन एक दृश्यमान संपत्ति द्वारा जरूरी नहीं है। दूसरे शब्दों में, जावास्क्रिप्ट रनटाइम आंतरिक पता है कि प्रोटोटाइप ऑब्जेक्ट क्या है, लेकिन यह आपके कोड के लिए यह निर्धारित करना संभव नहीं है कि यह क्या है। * क्यों * यह सच है, ठीक है, यह वही तरीका है जिस पर जावास्क्रिप्ट लागू किया गया था। – Pointy
कोई भी जो "हर जावास्क्रिप्ट ऑब्जेक्ट में प्रोटोटाइप प्रॉपर्टी" कहता है, आंतरिक संपत्ति का जिक्र कर रहा है (जैसा आपने उल्लेख किया है, अधिकांश ब्राउज़र पर '__proto__' के रूप में उजागर)। –
इस समान प्रश्न पर एक नज़र डालें: http://stackoverflow.com/questions/9451881/ –