Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.04.2012, 09:41
Профессор
Отправить личное сообщение для bot87 Посмотреть профиль Найти все сообщения от bot87
 
Регистрация: 16.05.2011
Сообщений: 307

создать из arguments настоящий массив
function someTest(a,b) {
           var args = Array.prototype.slice.call(arguments);
            args.shift()//удаляю аргумент
for(i=0;i<arguments.length;i++){
alert(arguments[i])	
}

    }

someTest(1,2)

Я ж удалил 1 аргумент, почему он остался?
Ответить с цитированием
  #2 (permalink)  
Старый 23.04.2012, 09:55
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

в цикле надо args использовать, а не arguments
function someTest(a,b) {
 var args = Array.prototype.slice.call(arguments);
  args.shift()//удаляю аргумент
  for(i=0;i<args.length;i++){
    alert(args[i])
  }
 
}
 
someTest(1,2);
Ответить с цитированием
  #3 (permalink)  
Старый 23.04.2012, 09:58
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

var args = [].slice.call( arguments );

Превращение arguments в настоящий Array

ппц... Вы хоть темы называйте правильно
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #4 (permalink)  
Старый 23.04.2012, 11:56
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от nerv_
var args = [].slice.call( arguments );
Не лучший вариант, как известно slice вызывает конструктор создания массива, который потом накапливает тем что есть в контексте, в вашем же случае происходит двойной вызов конструктора, один из них просто ненужный:

[] - вызывает конструктор (тот самый ненужный вызов)
.slice - ищет прототип slice в прототипах массива, то-есть глубокий поиск, начиная от экземпляра созданного массива
call(...) - снова вызывает конструктор для наполнения его тем что есть в контексте.

Пример данный Pavel M., намного производительный, так как не требует вызова лишних методов и поиска прототипа рекурсией.
var args = Array.prototype.slice.call(arguments);
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #5 (permalink)  
Старый 23.04.2012, 13:04
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

И такую штуку теперь лучше в отдельный метод Array.from оформлять.
Ответить с цитированием
  #6 (permalink)  
Старый 28.04.2012, 09:47
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Maxmaxmахimus
Утиная типизация.
При чем тут это? devote все правильно сказал (как мне кажется)
Цитата:
Смысл утиной типизации — в проверке методов и свойств, безотносительно типа объекта.
«Утиная» типизация
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #7 (permalink)  
Старый 28.04.2012, 10:02
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от devote
Не лучший вариант, как известно slice вызывает конструктор создания массива, который потом накапливает тем что есть в контексте, в вашем же случае происходит двойной вызов конструктора, один из них просто ненужный:
Вы действительно думаете, что это хоть как-то повлияет на скорость работы скрипта? Одно обращение к DOM сведёт на нет сотни таких оптимизаций.
Ответить с цитированием
  #8 (permalink)  
Старый 28.04.2012, 10:09
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Kolyaj
Вы действительно думаете, что это хоть как-то повлияет на скорость работы скрипта? Одно обращение к DOM сведёт на нет сотни таких оптимизаций.
Да мне собственно все-равно кто и как использует, я лишь описал внутреннее поведение конструкции. А что вам использовать то или иное решать вам. При вычислении каких либо данных, вариант заслуживает рассмотрения. Для работы остального вариант лишь показывает лишний раз что любой код/конструкция имеет право на жизнь. Пусть она хоть и немного но быстрее.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #9 (permalink)  
Старый 28.04.2012, 12:39
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Каждый по своему прав. Но, согласитесь, зачем делать больше (нагружать комп/браузер), если можно меньше, при том же результате или при еще более выигрышном. Это из серии "===" (идентично) работает быстрее, чем "==" (равно), т.к. последнее производит преобразования типов [насколько мне известно]. Над этим не надо загоняться, просто иметь ввиду )
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #10 (permalink)  
Старый 28.04.2012, 13:02
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от nerv_
зачем делать больше (нагружать комп/браузер), если можно меньше
Зачем нагружать сеть, гонять по ней больше байтов, если можно меньше?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать массив функций (?) venzh jQuery 1 02.02.2012 06:11
Как создать массив из картинок KamalovRadik Firefox/Mozilla 17 04.10.2011 14:06
Создать массив не содержащие данные другого масива KamalovRadik Общие вопросы Javascript 1 05.09.2011 03:30
Создать массив Nika2610 Работа 4 18.04.2011 09:23
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14