Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Что делает Array.prototype.slice.apply? (https://javascript.ru/forum/events/34631-chto-delaet-array-prototype-slice-apply.html)

platedz 13.01.2013 06:17

Что делает Array.prototype.slice.apply?
 
Array.prototype.slice.apply(document.querySelector All(tag))
Я так понимаю, что она преобразует в массив объект, но никак не пойму как это происходит? Подскажите, пожалуйста.
Возможно будет неплохим примером аналоге без использования Array.prototype, а также хотелось бы получить какие-нибудь примеры с использованием других функций Array.prototype, с небольшим объяснением.
Буду крайне признателен за ответ.

platedz 13.01.2013 20:14

Большое спасибо за ответ.
Про TypedArray я честно говоря не понял.

То, что такая конструкция переводит объект в массив я понял, но не понял, почему. Сама фукнция slice урезает массив до заданной длины, а какую она роль играет здесь. Тем более аргументы я не передаю. Что происходит когда я передают объект через apple таким способом. Пробовал с другими функциями массива такое сделать не вышло.

melky 13.01.2013 20:32

Цитата:

Сообщение от platedz
Про TypedArray я честно говоря не понял.

типизированные массивы - низкоуровневая структура данных с фиксированной длиной, которая может зранить данные только одного типа (пока что числа разных диапазонов).

появились недавно, в IE < 9 не реализованы, внешне от обычных массивов почти ничем не отличаются, но работают напорядок быстрее.

Цитата:

Сообщение от platedz
Сама фукнция slice урезает массив до заданной длины, а какую она роль играет здесь.

не урезает, а возвращает новый массив, который получился при проходе начального от start до end. если индексы не указывать, то start будет 0, а end - length, поэтому возвращается "массив из объекта".

т.е. в нашем случае примерно такой код будет альтернативой:
function slice (obj) {
    for (var i = 0, buf = [], m = parseInt(obj.length, 10); i < m; i++) {
        buf.push(obj[i]);
    }
    return buf;
}

platedz 14.01.2013 00:00

Спасибо за пояснение.

danik.js 12.03.2014 08:43

Цитата:

Сообщение от platedz
Array.prototype.slice.apply(document.querySelector All(tag))

Это не работает в IE8 кстати.


Часовой пояс GMT +3, время: 17:25.