迭代器中..的Javascript原型
Javascript prototype for...in Iterators?
由于我在这里张贴Mootools使用For(…在数组)的问题,一些javascript框架将原型数组对象,和其他一些代码(论坛引擎)确实使用For…在循环到循环数组中,当我将javascript框架插入这些现有代码时,事情就会出错。
//BEFORE
for(key in [1,2,3,4]) console.log(key) //0,1,2,3 keys of the array
//After JS Framework
for(key in [1,2,3,4]) console.log(key) //0,1,2,3,$family,$constructor,pop,push,reverse,shift,sort,splice
鉴于我不能触摸原始代码,其中包含这些For. In Array循环,我也想使用javascript框架(mootools)
我可以通过例如javascript迭代器原型来解决这个问题吗??
以某种方式重载For…In循环,让我所有的javascript For…在循环扫描数组类型,只返回值,而不是函数?我不知道如何做到这一点,但我想知道这是否可以做到?
原始代码被破坏…真可惜。
使用Mozilla JavaScript——不要将Mozilla JavaScript扩展与ECMAScript混淆——可以为对象定义自定义迭代器。参见JavaScript 1.7新增功能。然而,在这种情况下,这可能是不实际的。
我的建议是:
- 修复代码
- 应该使用
hasOwnProperty
进行键迭代,或者; -
i < arr.length
用于数组索引迭代。 - 防止mootools干扰内置对象的原型。
- 参考mootools文档(我不使用mootools)
- 使用一个不会扰乱内置对象原型的框架。
- jQuery不会干扰原型
快乐编码。
将数组存储在一个变量中,然后像这样遍历它:
var items = [1,2,3,4];
for(var i = 0; i < items.length; i++) {
console.log(i);
}
禁止在阵列上使用for (key in array)
逻辑。它用于迭代对象属性,而不是迭代数组。如您所见,当您在数组上使用它时,您将获得该数组的所有属性,包括已添加的非本机属性/方法。
你应该用这种类型的for循环来迭代数组:
for (var i = 0; i < array.length; i++) {
item = array[i];
}
是的,我们不能在数组上使用更短的语法,这似乎是一个遗憾,但这就是语言的方式。
可以尝试使用以下命令解决此问题:
for (key in array) {
if (array.hasOwnProperty(key)) {
// operate on array[key] here
}
}
但是,我不会推荐它。总之,使用用于数组的迭代器更安全。
原型函数可以很容易地通过"delete"删除,但框架往往依赖于它们,所以这不是一个好主意。
delete Array.prototype.$family;
delete Array.prototype.$constructor;
delete Array.prototype.pop;
delete Array.prototype.push;
...
不好的是手边没有容易的选择。
- 为论坛的脚本文件创建一个解析器,并在for中添加一个数字键验证,使用正则表达式(这是非常时髦的,但会达到目的)
- 创建另一个类Array2,并将整个框架替换为使用这个类而不是常规数组(这也是redneck,因为您以后可能需要其他插件)
- 做正确的事情,考虑将整个论坛迁移到更灵活的地方
- 使用“;这个“;JavaScript原型方法中的关键字
- 如何从对象的原型方法访问JavaScript对象属性
- Node.js中的JavaScript原型对象效率
- 为什么要返回'这'在导致循环的JavaScript原型中
- 原型和用法 Javascript
- JavaScript对象不是从原型链继承的
- javascript对象原型与jquery冲突
- 原型Javascript中的错误“;类别“-不是函数和未定义的变量
- 从字符串原型javascript获取字符串值
- 原型JavaScript Event.observe-如何观察可能存在或不存在的元素
- 与原型javascript冲突
- 为什么原型JavaScript在这种情况下不起作用
- 使用原型JavaScript - 最佳实践
- 添加到另一个原型实例的原型:JavaScript
- 函数.原型Javascript
- 如何在选定的原型javascript中更新基于第一选择框的第二选择
- 原型Javascript框架-获取PHP响应
- 如何访问类原型Javascript中定义的事件处理程序中的类成员变量
- 原型 javascript 不显眼的点击事件添加到按钮
- 字符串vs数组原型Javascript