Почему объекты, подобные массиву, используются в Javascript над собственными массивами - PullRequest
11 голосов
/ 22 ноября 2010

В Javascript очень часто встречаются объекты типа Array, имеющие некоторые сходства со сборкой в ​​типе Array, но без всех ее методов или функций.Настолько, что есть некоторые приемы для преобразования объектов, подобных массивам, в «настоящие» массивы для дальнейшей манипуляции.

Это даже упоминается в Javascript: полное руководство .

Вопрос в том, почему этот шаблон так распространен?Почему бы не использовать встроенный тип Array во всех этих случаях?

1 Ответ

7 голосов
/ 22 ноября 2010

Что касается core объектов Javascript, arguments является хорошим примером для разговора.

В данном случае это был массивоподобный объект с самого начала появилась в спецификации ECMAScript 1-го издания уже как простой объект.

Почему?Я думаю, что в то время было только четыре встроенных метода Array, и, возможно, дизайнер не думал, что это слишком много, позже было предложено изменение, но Microsoft (часть комитета TC39) не одобрилаизменить, страх взлома сети всегда присутствовал.

Теперь я собираюсь хост-объекты , DOM, NodeLists приходят мне на ум, я думаюони не хотели использовать собственный тип Array из-за динамического поведения этих объектов.

NodeLists обычно являются живыми объектами, их структура отражает любые изменения в базовом объекте.Структура DOM ...

Лично мне нравятся объекты массива, потому что они действительно легковесные, до ECMAScript 5, было много ограничений в основных методах, касающихся использования пользовательских объектов, подобных массиву.

Например, метод функциональных объектов apply в ECMAScript <= 3 допускает только реальный массив или объект аргументов в качестве второго аргумента, теперь в ES5, foвозможно: </p>

var arrayLike = {0: 'hello ', 1:'world', length:2};
(function (a,b) { alert(a+b); }).apply(null, arrayLike);

См. также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...