Сделать из arguments массив
Подскажите пожалуйста, почему в данном примере .slice используется без круглых скобок?
function sayHi(){ var args = [].slice.call(arguments); alert(args.join(':')); }; sayHi(5,2,7); В каком виде происходит обращение к .call, так [].slice или так .slice? Почему не легче использовать такое решение function sayHi(){ var args = []; for(var i = 0; i < arguments.length; i++){ args.push(arguments[i]); } alert(args.join(':')) } sayHi(5,2,7); |
Цитата:
Цитата:
|
Александр222, а в контексте изучение чего вам был дан такой пример?
|
Erolast,
Если не брать во внимание величину кода, в чем еще недостатки? |
|
Цитата:
|
Erolast,
Но первый вариант мне до сих пор не совсем ясен. Спасибо! |
Что непонятно? Метод slice при использовании без аргументов просто возвращает исходный массив. Ты вызываешь его в контексте масивоподобного объекта arguments - вот и получается в итоге массив, соответствующий объекту arguments. Для того, чтобы добраться до функции slice, ты создал пустой массив, да.
|
Erolast, поправка: не исходный массив, а копию оного.
Александр222, таким образом можно применять нативные функции к любым объектам имеющим сходное строение. Например массивоподобный объект: var obj = { 0: 'Hellow', 1: 'world!', length: 2 } alert( Array.prototype.join.call(obj, ' ') ) |
Часовой пояс GMT +3, время: 09:12. |