Функция Array.prototype не работает для document.forms [0] .elements - PullRequest
0 голосов
/ 13 декабря 2010

Я создал функцию-прототип для массивов, и она не позволяет мне использовать ее с массивом из 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 Ответ

1 голос
/ 13 декабря 2010

Это не настоящий массив, поэтому он не наследует Array.prototype.

Это на самом деле HTMLCollection, как вы можете узнать, позвонив по номеру toString().

Если вы хотите, вы можете изменить HTMLCollection.prototype, но модификация прототипов DOM не рекомендуется .

EDIT

Вы можете превратить его в настоящий массив, вызвав

var arr = Array.prototype.slice.call(document.forms[0].elements);
...