【发布时间】:2011-11-01 12:42:45
【问题描述】:
我想向 javascript 的数组对象添加一个原型函数。
我遇到的问题是,当我步进数组的键时,原型函数的名称出现在数组的键中。
这里有一个示例来说明问题:
<html> <head> <script type="text/javascript"> Array.prototype.foo = function () { // do something } function keys() { var fruit = ["apples","pears","bannanas"]; for (key in fruit) alert(key); // alerts: 0, 1, 2, foo } </script> </head> <body onload="keys();"> </body> </html>
关于如何解决这个问题的任何想法?
我没有为函数制作原型,但从可读性的角度来看,我更愿意。
编辑:为了清楚起见,上述示例的实际实现迭代了一个关联数组,因此是 for..in 循环
编辑:感谢大家的回复,但我认为你错过了我所追求的。我想知道的是我是否可以将原型函数添加到javascript的数组对象(或以具有相同效果的不同方式声明函数)而无需在通过for迭代数组时提高函数名称..在循环中。以indexOf 函数为例。 Javascript 似乎在内部以这样的方式定义它,即它不会出现在对象/数组的键中(对吗?)。可以在运行时重现相同的行为吗?
【问题讨论】:
-
不要使用
for...in来遍历数组。使用普通的for循环就不会出现这个问题了。 -
是的,除非它是一个关联数组——我不知道在不使用 for..in 循环的情况下迭代关联数组的方法..
-
或者你可以这样做,但检查类型不是函数 if (fruit[key].constructor != Function)
-
您应该更新您的示例以显示这一点。
-
javascript 中没有“关联数组”。有对象和数组。数组只是具有特殊长度属性和一些方便方法的对象。对象只是名称/值对的无序捆绑。
标签: javascript arrays prototype-programming