Автор:
Алексей Голубев
Сайт: http://www.frnet.narod.ru/
Зачастую бывает необходимо создавать такие функции, количество аргументов которых неопределено. Примером такой функции может послужить создание функции, выводящей на экран браузера меню, при перемножении,
сложении неопределенного количества чисел, случай, когда в качестве аргументов функции выступают элементы массива и т.д. и т.п. В качестве примера мы рассмотри функцию, которая будет выводить на экран список
ссылок.
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><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,
с использованием стилей и т.п.). Если возникли вопросы и есть предложения по улучшению функции пишите.
P.S. Вы можете cкачать этот пример со страницы: http://www.frnet.narod.ru/script.html.
Или задать вопрос автору и ведущему раздела alexey-golubev@mail.ru
Обсудить
в форуме...>>>>