Сделать из 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, время: 13:48. |