原型-var x=[]-将函数添加到x上

Prototype - var x = [] - adds functions onto x

本文关键字:函数 添加 -var 原型      更新时间:2023-11-03

我是Prototype的新手,但我总是使用jQuery。我有一个需要使用jQuery和Prototype的网站。我对以下代码有问题:

var x = [];
console.log(x);
for (var l in x)
{
console.log(l);
}

运行此代码时,x包含以下内容:

每个每个切片全部的任何收集发现findAll选择grep包括成员inGroupsOf注射援引最大最小隔断拔拒绝sortBytoArray条目拉链大小检查发现_反向_每个清楚的第一最后的契约压平没有uniq横断克隆

预期结果(无原型):

没有子对象

Prototype为什么会这样做,以及如何阻止它?!

感谢

您不应该对数组使用for...in,这正是原因。

for...in循环遍历对象的所有属性。这包括它的属性(在本例中为数组索引),以及添加到prototype的属性。

对于数组,只需使用普通的for循环。

var x = [];
console.log(x);
for(var i = 0, len = x.length; i<len; i++){
    console.log(i, x[i]);
}

注意:我做var i = 0, len = x.length是因为它只从数组中获取length一次,而不是每次迭代。它可能更快。

不应该在数组上使用for..in,应该使用for( i=0; i<length; i++)。但除此之外:

for( l in x) {
    if( x.hasOwnProperty(l)) {
        // l is a property of your object
    }
}

这基本上忽略了循环的原型链。

使用for ... in时,您枚举的是数组的所有(可枚举的)属性,而不仅仅是数字索引。

由于Prototype.js向Array.prototype添加了许多新函数,并且未能将它们标记为不可枚举的,因此这些函数也都出现在属性列表中。