Prototype.js और साहचर्य सरणियों

वोट
1

मैं निम्नलिखित निर्माण का एक साहचर्य सरणी (वस्तु) है

var menu = new Object('Submenu A','Submenu B','Submenu C','Submenu D');
menu['Submenu A']=new Object();
menu['Submenu A']['Option A']= 'foo blah text';
menu['Submenu A']['Option B']= 'blah more text';
menu['Submenu B']['Option A']= 'blah blah';
menu['Submenu B']['Option B']= 'texty text';
...
etc.

यह एक for..in पाश जो जब प्रोटोटाइप का उपयोग कर टूट जाता है कारण toJSON () और camelise तरह के तरीकों के साथ वर्ग का विस्तार करने के लिए दोहराया है ()

मैं प्रोटोटाइप के लिए चाहते प्रत्येक पद्धति का उपयोग करके लेकिन यह त्रुटियों कि मेनू [ 'सबमेनू ए'] अपरिभाषित है रिपोर्टिंग, यह विकल्प है कि इसके तहत परिभाषित कर रहे हैं पता लगाने के लिए नहीं कर पा रहे प्रयास किया है।

प्रोटोटाइप में एक साहचर्य सरणी पर पुनरावृति करने के लिए उचित तरीका क्या है?

आगे स्पष्टीकरण (उत्तर अब तक के लिए धन्यवाद)। मैं धीरे धीरे प्रोटोटाइप का उपयोग कर के लिए एक परियोजना में माइग्रेट कर रहा हूँ, लेकिन यह कोड है कि अभी तक प्रोटोटाइप संगत नहीं कर रहे हैं की बड़ी मात्रा में है। सवाल में कोड कई अन्य फ़ाइलों द्वारा प्रयोग किया जाता एक पुस्तकालय में है। कोड के रूप में एक समारोह, initialize_menu द्वारा कहा जाता है और कोड शामिल है

for (var i=0; i < menu.length; i++) {
    populate_sub_menu(menu[i])
}

सबमेनू समारोह इस तरह संरचित है

function populate_sub_menu(subMenu){
    for (var option in menu[subMenu]) {
        html+=menu[subMenu][option]+'html'+subMenu+option;
    }
}

मैं हो रही HTML तत्वों और इस तरह है कि समस्या से संबंधित नहीं हैं के बारे में कोड बाहर जा रहा हूँ।

26/01/2009 को 02:56
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


4 जवाब

वोट
1

आप प्रोटोटाइप के चाहते हैश

26/01/2009 को 03:24
का स्रोत उपयोगकर्ता

वोट
0

आप बस की जांच कर सकता है कि अगर मौजूदा ऑब्जेक्ट प्रकार की है आप के लिए (एक या आप, से बचने के लिए कोशिश कर रहे हैं समारोह की तरह) देख रहे हैं।

26/01/2009 को 03:26
का स्रोत उपयोगकर्ता

वोट
1

का प्रयोग करें hasOwnProperty विधि है, जो केवल गुण आप वस्तु दृष्टान्त पर परिभाषित किया है के लिए सच वापस आ जाएगी:

  for (var option in menu[subMenu]){
    if(menu[subMenu].hasOwnProperty(option)){
      html+=menu[subMenu][option]+'html'+subMenu+option;
    }
  }
26/01/2009 को 03:50
का स्रोत उपयोगकर्ता

वोट
5

कोई गुण के साथ एक नई वस्तु बनाने के लिए, का उपयोग करें:

var menu = new Object();

वस्तु निर्माता वास्तव में एक वैकल्पिक तर्क लेता है। अब तुम्हारे पास क्या है पर ध्यान दें:

var menu = new Object('Submenu A','Submenu B','Submenu C','Submenu D');

केवल पहला तर्क ( 'Submenu A'जबकि दूसरों को बस अनदेखी कर रहे हैं) का इस्तेमाल किया जा रहा है। हालांकि, वस्तु निर्माता के लिए एक स्ट्रिंग शाब्दिक गुजर एक नया कारण बनता Stringवस्तु एक के बजाय वापस लौटाए जा Objectवस्तु। मुझे लगता है कि अटकलें रहा हूँ, कारण प्रोटोटाइप का हो सकता है कि each()ऊपर काम कर रहा है (यदि यह वास्तव में इस वजह से नाकाम रहने के है)।

आप "कि मेनू [ 'SubmenuA'] अपरिभाषित है रिपोर्टिंग बाहर यह त्रुटि" उल्लेख किया है कि। अपने प्रश्न लिखने में कोई त्रुटि है? तुम्हें पता है, "सबमेनू ए 'संपत्ति कर रहे हैं तो' ए 'से पहले एक स्थान के साथ समय त्रुटि आप सूचना दी अंतरिक्ष की कमी लगती है।

तुम भी वस्तु गुण स्थापित करने में लंबे मार्ग ले जा रहे हैं। वस्तु शाब्दिक वाक्य रचना का उपयोग करना एक बहुत छोटी और हो जाएगा त्रुटि-रहित होता:

var menu = {
    "Submenu A": {
        "Option A": "foo blah text",
        "Option B": "blah more text"
    },
    "Submenu B": {
        "Option A": "blah blah",
        "Option B": "texty text"
    }
};
26/01/2009 को 04:15
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more