FRNET.NAROD.RU » Статьи » Создание функций с неограниченным количеством элементов
  » Навигация
- - - - - - - - - - - - - - - -
  » Наша кнопка
- - - - - - - - - - - - - - - -
   » Создание функций с неограниченным количеством элементов
 
Автор: Алексей Голубев

Сайт: 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 document.write("<LI><A href="+menu.arguments[i+1]+">"+
menu.arguments[i]+"</A>");

// Строим конечный тег списка
document.write("</UL>");
}
}
Вот все. Вы можете таким образом выводить списки и другого вида (при помощи тега select, с использованием стилей и т.п.). Если возникли вопросы и есть предложения по улучшению функции пишите.

P.S. Вы можете скачать пример, разобранный в статье.
 

  » Друзья сайта
- - - - - - - - - - - - - - - -
  » Разное
- - - - - - - - - - - - - - - -
  » Счетчики
- - - - - - - - - - - - - - - -
  Дизайнер и ведущий проекта: Голубев Алексей
Copyright Alexei Golubev © 2004
Hosted by uCoz