Array.prototype函数不适用于document.forms [0] .elements

时间:2010-12-13 17:10:32

标签: javascript arrays forms prototype

我为Arrays构建了一个原型函数,它不允许我将它与document.forms [0] .elements中的数组一起使用。这是一个显示此问题的简化脚本

<html>
<body>

<form id="frm1" action="form_action.asp">
  First name: <input type="text" name="fname" value="Donald" /><br />
  Last name: <input type="text" name="lname" value="Duck" /><br />
  <input type="submit" value="Submit" />
</form> 


<p>Return the value of each element in the form:</p>
<script type="text/javascript">
Array.prototype.returnFirst = function(){
   return this[0];
}
alert([1,2,3].returnFirst()); //Why does this work?
alert(document.forms[0].elements.returnFirst().id); //but this one doesn't?
</script>

</body>
</html>

你会看到,returnFirst()原型函数适用于我的[1,2,3]数组,但不适用于我的元素数组?为什么这样,它仍然是一个阵列?

1 个答案:

答案 0 :(得分:1)

这不是真正的数组,因此它不会继承Array.prototype

它实际上是HTMLCollection,您可以通过调用toString()来发现它。

如果您愿意,可以修改HTMLCollection.prototype,但modifying DOM prototypes is discouraged

修改

您可以通过调用

将其变为真实数组
var arr = Array.prototype.slice.call(document.forms[0].elements);