में नामांकित कुंजियों का उपयोग करके मैं The Principles of Object-Oriented Javascript के माध्यम से काम कर रहा हूं और एक सरणी के अंदर नामित कुंजी के जकास के उपयोग के साथ उलझन में हूं (जैसा किसी ऑब्जेक्ट के अंदर है)। टिप्पणी देखें:जेएस सरणी
function EventTarget() {}
EventTarget.prototype = {
constructor: EventTarget,
addListener: function(type, listener) {
if (!this.hasOwnProperty("_listeners")) {
// Why isn't this: `this._listeners = {};`
this._listeners = [];
}
if (typeof this._listeners[type] === "undefined") {
this._listeners[type] = [];
}
this._listeners[type].push(listener);
},
// more stuff
}
var target = new EventTarget();
target.addListener("message", function(event) {
console.log("Message is " + event.data);
});
उनकी कोड ठीक काम करता है (के रूप में यह है, तो आप एक वस्तु शाब्दिक के लिए सरणी स्थानापन्न करता है), लेकिन मेरी समझ रहा है कि आप एक वस्तु का उपयोग करना चाहिए आप नाम से सामग्री का उपयोग करना चाहते हैं। array article on w3schools से:
कई प्रोग्रामिंग भाषा नामित इंडेक्स के साथ सरणी का समर्थन करती हैं।
नामित इंडेक्स वाले Arrays को सहयोगी सरणी (या हैश) कहा जाता है।
जावास्क्रिप्ट नामित इंडेक्स के साथ समर्थन सरणी नहीं करता है।
जावास्क्रिप्ट में, सरणी हमेशा क्रमांकित अनुक्रमणिका का उपयोग करें।
क्या कोई अच्छा कारण है कि जकास ने इस तरह एक सरणी का उपयोग किया? क्या आप इसे समझा सकते हैं? वैकल्पिक रूप से, क्या यह मुझे the errata पर सबमिट करना चाहिए?
इस कोड को 'अगर type' सही है पूर्णांक – hindmost
है यह कोड अभी भी काम करता है क्योंकि यह सरणी ऑब्जेक्ट पर गुण सेट कर रहा है, वास्तविक सरणी में नहीं। 'ऑब्जेक्ट.getOwnPropertyNames (this._listeners)' और फिर 'ऑब्जेक्ट.कीज़ (this._listeners)' देखें। 'this._listeners' एक ऑब्जेक्ट होना चाहिए, एक सरणी नहीं। – usandfriends
@ हिंडोस्ट: कोड सही है (इसमें यह कार्यात्मक है) भले ही 'टाइप' * एक पूर्णांक नहीं है (और ऐसा लगता है कि यह संभव नहीं होगा, एक स्ट्रिंग होने की संभावना अधिक है" ')। –