相关疑难解决方法(0)

1761
推荐指数
23
解决办法
82万
查看次数

Javascript自定义Array.prototype干扰for-in循环

我试图用一个函数来扩展Javascript的Object类型,该函数检索属于该对象的所有属性名称(基本上是PHP的array_keys()函数对关联数组的作用).

Object.prototype.keys = function() {
    var a = [];
    for (var property in this) {
        a.push(property);
    }
    return a;
};

var a = {a:1,b:2,c:3,d:4};
alert(a.toSource());

var b = a.keys();
alert(b.toSource());
Run Code Online (Sandbox Code Playgroud)

当变量b被警告时,我期待看到["a","b","c","d"],而不是我看到的["a","b","c","d","keys"].

看来for-in循环包括原型keys()函数.

是否有可能在仍然进行原型设计的同时避免这种行为,或者我是否应该避免一起进行原型设计?

javascript

3
推荐指数
1
解决办法
2639
查看次数

JavaScript"for in"循环中的问题

我有一系列对象,它们将成为我网站中某个菜单的基础.它将使用JavaScript构建:

[
  {"menuName":"Contact Info","sectionName":"contacts"},
  {"menuName":"Facilities","sectionName":"facilities"},
  {"menuName":"Locations","sectionName":"locations"},
  {"menuName":"Packages","sectionName":"packages"},
  {"menuName":"Policies","sectionName":"policies"},
  {"menuName":"Reviews","sectionName":"reviews"},
  {"menuName":"Rooms","sectionName":"rooms"}
]
Run Code Online (Sandbox Code Playgroud)

所以我决定使用"for in loop",这样我就不必处理索引和长度了.我建议在构建时在菜单中显示七个项目(我将使用<ul><li>).

当我调试并意外地添加了背景颜色<li>时,是什么时候全都崩溃了.<li>在可见的第7个菜单后,我发现至少有30个空<li>.

为什么会这样?

编辑:

这是循环.循环为另一个函数创建另一个对象,以便稍后解析.(它创建一个<li>带有<a>前一个数组提供的属性的内部.)我知道另一个函数工作正常,因为当我将这个"for-in"循环更改为普通for循环或while循环时,它工作正常.

this.sectionList = function(menu, id) {
    var list = new Array();

    for(var i in menu) {
        var listItem = {
            "element" : "li",
            "contains" : [{
                "element" : "a",
                "attr" : {
                    "href" : menu[i].sectionName + ':' + id
                },
                "contains" : menu[i].menuName
            }]
        }
        list.push(listItem);
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript arrays loops object for-in-loop

-2
推荐指数
1
解决办法
3203
查看次数

标签 统计

javascript ×3

arrays ×2

loops ×2

for-in-loop ×1

for-loop ×1

iteration ×1

object ×1