Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/30: Рейтинг темы: голосов - 30, средняя оценка - 4.77
front-end developer
 Аватар для Vicont
284 / 275 / 39
Регистрация: 31.08.2010
Сообщений: 577
Записей в блоге: 1

prototype.slice.call()

30.09.2010, 18:34. Показов 6380. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Наткнулся на такую конструкцию:
"чтобы вызвать другую функцию с теми же аргументами, но кроме первого, можно создать из arguments настоящий массив:"
JavaScript
1
2
3
var args = Array.prototype.slice.call(arguments)
// .. теперь args - настоящий массив аргументов ..
args.shift()
что тут вообще происходит?
Я знаю что Array.prototype.метод(свойство) = реализация(значение) добавление метода(свойства) к статическому объекту Array. Slice() применяется к массивам для формирования выборки текущего массива. Call применяется к объекту функции для ее вызова. А вот что происходит в Array.prototype.slice.call(arguments) не могу понять???
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.09.2010, 18:34
Ответы с готовыми решениями:

.slice не работает
есть такой код setTimeout(function () { var S = document.getElementById('iteminfo1_item_market_actions').innerText; S =...

Аналог метода slice для работы с массивами
Подскажите, пожалуйста, либо наведите на мысль, как реализовать функцию, которая будет работать аналогично методу slice. Функция должна...

Может ли кто объяснить механизм работы метода slice () для массива массивов?
задача 1: имеем массив из N элементов необходимо вывести первый и последний элемент этого массива, используя метод slice () ...

4
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
30.09.2010, 18:38
Цитата Сообщение от Vicont Посмотреть сообщение
что тут вообще происходит?
Это оно не выдает ошибок выполнения, например, о несоответствии типов, то по сути здесь преобразование коллекции arguments в массив.
0
front-end developer
 Аватар для Vicont
284 / 275 / 39
Регистрация: 31.08.2010
Сообщений: 577
Записей в блоге: 1
30.09.2010, 18:57  [ТС]
Это в общем) а что делается в выражении, если рассматривать поэтапно?)
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
30.09.2010, 19:16
Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

Требуется: малой кровью убрать из arguments первый аргумент и сдвинуть все остальные на 1 к началу.
Как будем делать: будем извращаться с методом shift у Array.
Решение:

Объект arguments не является массивом
JavaScript
1
2
3
(function(){
    alert(arguments instanceof Array); // false
})(1,2,3);
Чтобы использовать метод shift из массива, надо arguments преобразовать в массив.

Все массивы являются экземплярами класса Array и имеют метод slice, оторый возвращает новый массив.
JavaScript
1
alert( [10, 20, 30, 40].slice(1) ); // 20,30,40
Стало быть, у класса Array в прототипе существует свойство slice
JavaScript
1
alert(typeof Array.prototype.slice); // function
У функций есть метод call для вызова в контексте объекта. Вот его мы и используем
JavaScript
1
var args = Array.prototype.slice.call(arguments);
Получается, что если бы arguments являлся массивом, то получилось бы arguments.slice();
Далее для полученного массива делаем shift, чтобы убрать первый элемент.

А можно было сразу:
JavaScript
1
var args = Array.prototype.slice.call(arguments, 1);
Итого
JavaScript
1
2
3
4
(function(){
    var args = Array.prototype.slice.call(arguments, 1);
    alert(args); // 2,3,4
})(1, 2, 3, 4);
2
front-end developer
 Аватар для Vicont
284 / 275 / 39
Регистрация: 31.08.2010
Сообщений: 577
Записей в блоге: 1
30.09.2010, 19:23  [ТС]
Спасибо! Довольно подробно объяснили!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.09.2010, 19:23
Помогаю со студенческими работами здесь

использование prototype
Доброй ночи! Помогите, пожалуйста, разобраться. Есть пример кода: function array_max(){ var i, max = this; for (i =...

Javascript prototype
Вообщем, смотрим код ниже. function EsObject(_data){ var data = $.extend(true, {}, _data), SelfObj = this; this.set =...

C.prototype.constructor = C
Привет. Код function A() { this.Name = 'Class A' } A.prototype.PrintName = function () { alert(this.Name); }

Object.prototype.b
По умолчанию в прототипе функции Object (кстати, так можно эти функции называть классами или конструкторами?) не содержится никаких свойств...

Object.prototype.method
Всем привет! объясните пожалуйста, есть функция конструктор "myObject": function myObject () { }; myObject.prototype.on =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru