![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| Се ля ви |
|
||||||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 5 Всего: 127 |
С некоторых пор меня интересует мотивация составителей стандарта ECMAScript, которые в отношении объекта "arguments" написали:
Почему бы было не придать ему функциональность Array`а? Ведь и length есть и элементы по индексам перебираются... Почему, например:
Зачем нужно было ставить всем параметрам атрибут { DontEnum }? В итоге мы не можем пройтись по значениям атрибутов удобным способом с использованием конструкции for..in, а вынуждены писать обычный перебор со счётчиком... В общем, сколько использую этот объект - столько мучаюсь. Интересует - хотя бы для чего это сделано? -------------------- |
||||||
|
|||||||
| Се ля ви |
|
||||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 5 Всего: 127 |
В общем, пока не придумал ничего лучшего, чем сделать так:
Соответсвенно, если нужно перенаправить вызов другой функции при том, что не хочется вдаваться в количество переданных параметров, можно теперь писать так:
-------------------- |
||||
|
|||||
| dsCode |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: 19 Всего: 26 |
Точного объяснения никто (?) не видел =) Вообще, многие жалуются, почему arguments не массив, но толком сегодня объяснить этого не могут (были даже слухи, что NetScape обвинил в этом Microsoft =)), но я не знаю, насколько это правда) а можно slice'ом:
ничего в Object.prototype расширять не надо. В Gecko и Opera потом будут лишние свойства даже у html'ых input'ов. Если уж хранить, то просто в Object.toArray = function(obj) { ... } (хотя вызов будет уже не столь красивым, конечно =)). Это сообщение отредактировал(а) dsCode - 19.6.2008, 23:06 |
|||
|
||||
| Се ля ви |
|
||||||||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 5 Всего: 127 |
А я вот что нашёл:
Т.е. ещё удобней можно сделать так:
По крайней мере, они последовательны в своём стремлении не делать arguments массивом, так что элегантно вывернуться всё-таки можно. ;) -------------------- |
||||||||
|
|||||||||
| dsCode |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: 19 Всего: 26 |
так а это простой вызов функции, не эплай, поэтому не будет 'x = 1, y = 2' (будет x = null, y = [Object]) if это так, то будет передано argArray.length (количество) аргументов, и будут они доступны по индексам, начиная с 0. Т.е. если .apply(this, [1, 2]), то тогда arguments[0] == 1 (x), arguments[1] == 2 (y).
а скорей всего просто тянут за собой наследие для обратной совместимости (и ладно бы, можно было пользоваться как объектом (например, arguments['a'], где a - имя формального параметра), так нет же - имитация обычного индексного массива). Это сообщение отредактировал(а) dsCode - 20.6.2008, 12:45 |
|||
|
||||
| Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 5 Всего: 127 |
забыл вписать просто Да, главное здесь то, что arguments он принимает тоже. Мне собственно и нужно было организовать вызов одной функции из другой так, что бы не вникать сколько первой было передано параметров - просто передать всё, что есть. А у которых нет имён? ;) Для них всё равно пришлось бы индексы делать... Да уж лучше бы тогда вообще к event object`у дали доступ... -------------------- |
|||
|
||||
| dsCode |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: 19 Всего: 26 |
Ну да, это стандартный прием вызова функции в нужном контексте с передачей arguments. Как частный вариант - ваш вызов с null, однако, если вызываемая функция работает с this, то передача null'a приведет к неправильным результатам. |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |