循环遍历数组时的原型对象
Prototype object when looping through array?
我在循环数组时得到令人困惑的结果。
填充数组看起来像
var tables = [];
// ...
// t is table as jQuery object
tables[t.attr('id')] = t;
稍后,当循环遍历表数组时,我得到的元素比实际添加的多一个。当另一个对象到达 t.removeClass() 时程序中断
for (t in tables) {
var t = tables[t];
t.removeClass(...);
}
Visual Studio Debugger将另一个对象描述为"克隆",这是原型对象/属性(?)的第一种方法。
tables
[prototype]
[Methods]
clone
...
[prototype]
MyTable0
MyTable1
我读过每个javascript对象都带有原型属性,但是为什么这里的原型被视为对象?
注意:如果你的id不是数字,那么你不需要数组,看看另一个答案。
若要遍历数组,请不要使用 for..in
构造。
用
for (var i=0; i<tables.length; i++) {
var t = tables[i];
t.removeClass(...);
}
或者如果你不关心IE8:
tables.forEach(function(t) {
t.removeClass(...);
});
或使用 jQuery :
$.each(tables, function(_,t){
t.removeClass(...);
});
旁注:看起来有人很差地丰富了本机 Array 类的原型。这通常被视为不好的做法。这样做并使属性可枚举甚至更糟。您应该考虑删除或修复您使用的库。
表的声明应为:
var tables = {};
相关文章:
- Node.js中的JavaScript原型对象效率
- 获取原型对象的名称
- 如何维护对原型对象的访问
- 文字与原型对象表示法的数据结构
- 使用原型对象向javascript对象添加自定义属性和方法的建议
- 正在重置原型对象的构造函数属性
- 编写JS原型时,所有函数都应该使用原型对象
- 什么's是原型对象的真实名称
- Javascript - 使用数组作为函数的参数,并在创建新的原型对象时更改值
- 在原型对象 jquery 上将一个按钮与另一个按钮不同
- 原型对象
- 循环遍历数组时的原型对象
- 为什么初始化的 JavaScript 对象不包含原型对象
- JavaScript 原型对象 - 如何访问继承
- Javascript:获取此原型对象名称
- 如何在数据绑定后在 KNOCKOUT js 中使用“with”访问另一个原型对象
- 这在 JavaScript 中的原型对象中的值
- 在主干中向原型对象添加值不起作用
- 删除函数原型对象
- 为什么当我在这个JavaScript对象上使用反射时,我可以'看不到在其原型对象中定义的属性