![]() ![]() колонтитул в word 2007, 0000002111
Cookies - механизм управления обменом данных в JavaScript - 2Продолжение: стр. № 2 Как быть, когда трудно определить, сколько потребуется аргументов? Можно иметь функцию, которая получает от 1 до n аргументов и выполняет с каждым из них одну и ту же задачу. На этот случай JavaScript имеет в каждой функции объект "arguments". Объект arguments содержит все аргументы функции:
function myFunction(){ for(var i=0; i<arguments.length; i++){ alert(arguments[i].value); } } Один из наиболее интересных аспектов JavaScript – идея о том, что функции являются объектами и могут передаваться как поле ввода, изображение или что- то еще, что может быть. Посмотрите, например, следующий код:
<script type="text/javascript"> function multiply(){ var out=1; for(var i=0; i<arguments.length; i++){ out *= arguments[i]; } return out; } function add(){ var out=0; for(var i=0; i<arguments.length; i++){ out += arguments[i]; } return out; } function doAction(action){ alert(action(1, 2, 3, 4, 5)); } </script> <button onclick="doAction(multiply)">Test Multiply</button> <button onclick="doAction(add)" >Test Add</button> В этом небольшом фрагменте кода происходит очень многое. Вначале просто определяют две функции: multiply и add. Функция multiply просто перемножает все переданные ей числа. Аналогично, функция add складывает все переданные ей числа. Тонкости начинаются при использовании действий onclick двух созданных кнопок. Можно видеть, что при щелчке на любой из двух кнопок в функцию doAction передается объект. Ранее мы всегда передавали переменные или объекты HTML (такие, как поля ввода в предыдущем примере). В этом примере передаются функции. Функции можно передавать таким же способом, как и любой другой объект, и когда они передаются, их можно вызывать таким же способом, как и любую другую функцию. Изменяется только ее имя. Таким образом функция doAction получает другую функцию в качестве аргумента! Если передается функция multiply, то функция doAction передает ей значения от 1 до 5, и мы получаем в результате 120. Если в doAction передается функция add, то ей также передаются значения от 1 до 5, и в результате мы получаем значение 15. Это в действительности одно из наиболее мощных свойств JavaScript, и оно будет более подробно рассмотрено в следующих лекциях. Пока достаточно понять общий принцип. Другим важным свойством функций является возможность вложения их друг в друга. JavaScript не поддерживает истинный объектно-ориентированный подход к проектированию, но это свойство обеспечивает очень похожие возможности. Кроме вложения функций, важно отметить, что имеется несколько различных способов объявления функций:
function myFunction(){ function nestedFunction1(arg1, arg2, arg3){ alert(arg1+arg2+arg3); } var nestedFunction2 = function(arg1, arg2, arg3){ alert(arg1+arg2+arg3); } var nestedFunction3 = new Function('arg1, arg2, arg3', 'alert(arg1+arg2+arg3);'); } Единственное различие состоит в том, как они определяются. nestedFunction1 объявлена, как это делалось раньше.
Синтаксис для nestedFunction2 немного отличается. Мы
задаем для функции переменную this.nestedFunction2. Синтаксис этого объявления
будет следующий " имяПеременной= function(аргументы){". Аналогично для функции
nestedFunction3 задается переменная для новой функции. Однако это объявление
существенно отличается, так как мы определяем функцию с помощью строк. Третий
вариант используется редко, но является очень полезным, когда используется. Он
позволяет создать строку, содержащую код выполняемой функции, а затем определить
функцию с помощью этой строки. СтрокиВ JavaScript строка является любым фрагментом текста. Как и многие другие объекты в JavaScript, строки можно определять несколькими различными способами:
var myString = 'Hello, World!'; var myString = new String('Hello, World!');
var n = 5; var s = new String(n*20); Строковые объекты (var n = new String('Hello World')) технически являются в Internet Explorer более медленными при некоторых операциях, чем строковые литералы (var n = 'Hello World'). Однако это поведение совершенно противоположно в других браузерах. В любом браузере различие редко бывает настолько заметно, чтобы об этом беспокоиться. Единственное важное различие состоит в том, что eval() не работает со строковыми объектами. Что, если в строке имеется апостроф? Следующий код работать не будет:
var n = 'The dog took it's bone outside'; Здесь можно сделать две вещи. Так как строка определяется с помощью одиночных или двойных кавычек, то можно задать строку с помощью двойных кавычек. Другая возможность состоит в экранировании апострофа. Чтобы экранировать символ, необходимо просто подставить перед ним символ \. Символ \ в этом контексте сообщает JavaScript, что следующий символ необходимо воспринимать в точности так, как он есть, в номинальном значении, а не как специальный символ.
var n = "The dog took it's bone outside"; var n = 'The dog took it\'s bone outside'; В предыдущей лекции мы встречались с функциями indexOf и lastIndexOf. Напомним, что они делают. Функция indexOf возвращает число, определяющее первую позицию одной строки в другой. Если разыскиваемая строка не существует, то indexOf возвращает -1. Функция lastIndexOf идентична indexOf, но возвращает не первую позицию вхождения строки, а последнюю. Тот факт, что функции indexOf и lastIndexOf возвращают -1, если строка не существует, является очень полезным и позволяет использовать эти функции для достаточно распространенной задачи - проверки того, что одна строка существует внутри другой.
Существует несколько других полезных функций для работы со строками, которые мы
перечислим и кратко поясним.
Примеры всех приведенных выше функций:
alert('This is a Test'.indexOf('T')); // 0 Последней строковой функцией, которая будет рассмотрена, является eval(). eval() получает строку и выполняет строку, как если бы это был код JavaScript. eval("alert('Hello, World!')");
В этом примере будет выведено сообщение "Hello, World!",
как если бы функция alert была написана обычным образом. Это может быть очень
полезно, так как позволяет создать содержащую код строку, а затем ее выполнить. колонтитулы в word 2007, 000000211111
Рекомендуем в повседневной деятельности:
![]() ![]() |