Моя гипотеза:
Концепция объекта arguments
существует в языке с самого начала, она даже описана в ECMAScript First Edition Standard (PDF) .
В этой версии ECMAScript Array.prototype
был действительно базовым, объекты массива содержали только 4 метода! : toString
, join
, reverse
и sort
.
Я думаю, что это одна из основных причин того, что они arguments
наследуются от Object.prototype
, тогда эти методы Array не выглядели слишком полезными .
Но объект Array.prototype
был расширен в следующих версиях стандарта, теперь в ES5 объекты Array имеют такие методы, как map
, reduce
, every
, some
и т. Д., Которые действительно мощный .
В прошлом году в ES5 было предложено сделать наследование arguments
от Array.prototype
на черновой стадии стандарта, но позднее оно было исключено.
В этих черновиках arguments
унаследовано от Array.prototype
, но для обратной совместимости с ES3 объект arguments
определил два собственных свойства, toString
и toLocaleString
, оба указывают на одни и те же методы в Object.prototype
, но, наконец, комитет решил продолжить наследование от Object.prototype
.