javascript - Prototype.js 和关联数组

标签 javascript prototypejs

我有一个具有以下构造的关联数组(对象)

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() 等方法扩展类,该循环在使用原型(prototype)时中断

我曾尝试使用 Prototype 的 .each 方法,但它会错误地报告菜单 ['Submenu A'] 未定义,它似乎无法找到在其下定义的选项。

在原型(prototype)中迭代关联数组的正确方法是什么?

进一步说明(感谢到目前为止的回答)。 我正在慢慢地将一个项目迁移到使用原型(prototype),但它有大量的代码还不兼容原型(prototype)。有问题的代码位于其他几个文件使用的库中。 代码由函数 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 元素的代码以及与问题无关的代码。

最佳答案

要创建一个没有属性的新对象,请使用:

var menu = new Object();

Object 构造函数实际上采用一个可选参数。现在让我们看看你有什么:

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

只有第一个参数('Submenu A')被使用,而其他的被简单地忽略。但是,将字符串文字传递给 Object 构造函数会导致返回一个新的 String 对象,而不是 Object 对象。我推测,这可能是 Prototype 的 each() 出错的原因(如果它真的因此而失败的话)。

您提到“报告 menu['SubmenuA'] 未定义时出错”。你的问题有错别字吗?您正在设置“子菜单 A”属性,在“A”之前有一个空格,而您报告的错误似乎缺少空格。

您在设置对象属性方面似乎也走了很长的路。使用对象字面量语法会更短且更不容易出错:

var menu = {
    "Submenu A": {
        "Option A": "foo blah text",
        "Option B": "blah more text"
    },
    "Submenu B": {
        "Option A": "blah blah",
        "Option B": "texty text"
    }
};

关于javascript - Prototype.js 和关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/478815/

相关文章:

javascript - 与日期选择器和表格排序器的冲突

javascript - 字符串 'properties.dimensions.length' 访问散列 {properties : {dimensions: {length: 23}}}

javascript - 如何在 JavaScript 中移动带方向的 div?

javascript - MooTools 和数组原型(prototype)

javascript - 如何在 onclick 事件后在其顶部包含图像的同一单元格上显示文本

javascript - 为什么数组在 reduce 中不可迭代

javascript - FireFox 中的 For 循环问题

javascript - 使用原型(prototype)在 javascript 中获取表单数组

javascript - 使用 jQuery 和原型(prototype)时发生冲突,已经用 jQuery.noConflict() 解决了,但是

javascript - 事件冒泡原型(prototype)