Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.06.2014, 15:28
Аспирант
Отправить личное сообщение для Александр222 Посмотреть профиль Найти все сообщения от Александр222
 
Регистрация: 24.04.2014
Сообщений: 55

Сделать из 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);
Ответить с цитированием
  #2 (permalink)  
Старый 10.06.2014, 16:21
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
Подскажите пожалуйста, почему в данном примере .slice используется без круглых скобок?
Потому что ты ее не вызываешь. Ты вызываешь ее метод call, унаследованый через систему прототипов - http://javascript.ru/Function/call. В javascript функции - тоже объекты, да-да.

Цитата:
Почему не легче использовать такое решение
Легче? Мне кажется, что оно длиннее на две строки.
Ответить с цитированием
  #3 (permalink)  
Старый 10.06.2014, 16:24
Профессор
Отправить личное сообщение для depp Посмотреть профиль Найти все сообщения от depp
 
Регистрация: 22.04.2014
Сообщений: 151

Александр222, а в контексте изучение чего вам был дан такой пример?
Ответить с цитированием
  #4 (permalink)  
Старый 10.06.2014, 16:26
Аспирант
Отправить личное сообщение для Александр222 Посмотреть профиль Найти все сообщения от Александр222
 
Регистрация: 24.04.2014
Сообщений: 55

Erolast,
Если не брать во внимание величину кода, в чем еще недостатки?
Ответить с цитированием
  #5 (permalink)  
Старый 10.06.2014, 16:26
Аспирант
Отправить личное сообщение для Александр222 Посмотреть профиль Найти все сообщения от Александр222
 
Регистрация: 24.04.2014
Сообщений: 55

depp,
http://learn.javascript.ru/this#%D0%...%D 0%B9-array
Ответить с цитированием
  #6 (permalink)  
Старый 10.06.2014, 16:33
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
Erolast,
Если не брать во внимание величину кода, в чем еще недостатки?
Ну, вариант со slice будет немного быстрее, потому что функция нативная. Совсем немного. В остальном - да ни в чем. Первй вариант выигрывает именно в элегантности.
Ответить с цитированием
  #7 (permalink)  
Старый 10.06.2014, 16:39
Аспирант
Отправить личное сообщение для Александр222 Посмотреть профиль Найти все сообщения от Александр222
 
Регистрация: 24.04.2014
Сообщений: 55

Erolast,
Но первый вариант мне до сих пор не совсем ясен.

Спасибо!
Ответить с цитированием
  #8 (permalink)  
Старый 10.06.2014, 16:47
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Что непонятно? Метод slice при использовании без аргументов просто возвращает исходный массив. Ты вызываешь его в контексте масивоподобного объекта arguments - вот и получается в итоге массив, соответствующий объекту arguments. Для того, чтобы добраться до функции slice, ты создал пустой массив, да.
Ответить с цитированием
  #9 (permalink)  
Старый 11.06.2014, 00:52
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

Erolast, поправка: не исходный массив, а копию оного.


Александр222, таким образом можно применять нативные функции к любым объектам имеющим сходное строение.

Например массивоподобный объект:
var obj = {
    0: 'Hellow',
    1: 'world!',
    length: 2
}
alert(
    Array.prototype.join.call(obj, ' ')
)
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в шаблоне диррективы узнать массив это или строка? delias Angular.js 1 18.03.2014 07:33
Отправить, когда четко соберется массив vas88811 Events/DOM/Window 11 26.02.2014 21:55
Массив объектов doox911 Библиотеки/Тулкиты/Фреймворки 6 16.01.2014 22:36
создать из arguments настоящий массив bot87 Общие вопросы Javascript 10 28.04.2012 21:34
Помогите сделать такое меню(( Lilith Я не знаю javascript 2 02.06.2009 02:31