Зачастую бывает необходимо создавать такие функции, количество аргументов которых неопределено. Примером такой функции может послужить создание функции, выводящей на экран браузера меню, при перемножении, сложении неопределенного количества чисел, случай, когда в качестве аргументов функции выступают элементы массива и т.д. и т.п. В качестве примера мы рассмотри функцию, которая будет выводить на экран список ссылок.
1. Рнтерфейс функции.
Для применения функции нужно ввести следующий фрагмент:
<SCRIPT language=javascript>
menu (
«Р аздел1», «item1.htm»,
...
«Р азделn», "itemn.htm
« );
</SCRIPT>
То есть, мы записывает в аргументах функции название разделов и ссылки им соответствующие (в нужном количестве, конечно), а функция строит на экране нужный список.
2. Сама функция.
Сама функция должана:
А) получать количество аргументов;
Р‘) выполняться РїСЂРё количестве аргументов больС?Рµ 1;
В) выводить на экран меню.
Рассмотрим все по порядку.
А) Получение количества аргументов.
Получение количества аргументов можно организовать одной строкой следующего вида: var x = имя_функции.arguments.length;
Р’ РЅР°С?ем случает (так как РјС‹ назвали функцию menu) строка будет выглядеть следующим образом:
var x = menu.arguments.length;
При выполнении данной строки количество элементов функции menu будет заноситься в переменную x.
Б) Условие выполнения функции.
Если Сѓ нас количество аргументов будет равно 1 (или 0), то функция будет выполняться СЃ РѕС?ибками, поэтому главную часть функции РЅСѓР¶РЅРѕ заключить РІ оператор условия if следующим образом:
if (x > 1)
{
//какие-то действия
}
В) Какие-то действия.
Что надо еще определить — это четно ли число аргументов, если нет, то РјС‹ отбрасываем последний аргумент:
if (x%2) x--;
Мы будет выводить маркированный список, поэтому должны в первую очередь записать открывающий список тег (для красоты сделаем маркеры квадратными):
document.write („<ul type=square>“);
Теперь можно приступать к непосредственному выводу элементов списка. Делать мы это будем естественно при помощи цикла:
for (var i=0; i<x; i+=2)
document.write („<LI&
gt;<A href=“+menu.arguments[i+1]+»>" + menu.arguments[i]+"</A>");
Свойство arguments объекта menu является массивом, поэтому обращаться с ним мы будем соответственно.
Рв заключении записываем закрывающий список тег:
document.write («</ul>»);
В итоге мы получили следующую функцию:
function menu ()
{
// число аргументов функции
var x = menu.arguments.length;
// Функция работает, если число аргументов больС?Рµ РѕРґРЅРѕРіРѕ
if (x > 1)
{
// Если число аргументов нечетно,
//последний аргумент игнорируем
if (x%2) x--;
// Строим начальный тег списка
document.write («<UL type=disc>»);
// Построение списка
for (var i=0; i<x; i+=2)>br>document.write («<LI><A href=»+menu.arguments[i+1]+">"+
menu.arguments[i]+"</A>");
// Строим конечный тег списка
document.write («</UL>»);
}
}
Р’РѕС‚ РІСЃРµ. Р’С‹ можете таким образом выводить СЃРїРёСЃРєРё Рё РґСЂСѓРіРѕРіРѕ РІРёРґР° (РїСЂРё помощи тега select, СЃ использованием стилей Рё С‚.Рї.). Если возникли РІРѕРїСЂРѕСЃС‹ Рё есть предложения РїРѕ улучС?ению функции РїРёС?ите.