Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
R_S_R_S_R_RyeR_R_javasbript.doc
Скачиваний:
49
Добавлен:
09.04.2015
Размер:
546.3 Кб
Скачать

Работа с неопределенным числом параметров

Непосредственно перед входом в тело функции, автоматически создается объектarguments, который содержит

  1. Аргументы вызова, начиная от нуля

  2. Длину в свойстве length

  3. Ссылку на саму функцию в свойстве callee

Например,

01

function func() {

02

    for(var i=0;i<arguments.length;i++) {

03

        alert("arguments["+i+"] = "+arguments[i])

04

    }

05

}

06

func('a','b',true)

07

 

08

// выведет

09

// arguments[0] = a

10

// arguments[1] = b

11

// arguments[2] = true

Свойство arguments похоже на массив, т.к у него есть длина и числовые индексы. На самом деле arguments не принадлежит классу Array и не содержит его методов, таких как push, pop и других.

Если все же хочется воспользоваться этими методами, например, чтобы вызвать другую функцию с теми же аргументами, но кроме первого, можно создать изarguments настоящий массив:

1

var args = Array.prototype.slice.call(arguments)

2

// .. теперь args - настоящий массив аргументов ..

3

args.shift()

4

...

Вызвать функцию для массива аргументов можно при помощи apply:

var func = function(a,b) { alert(a+b) }

var arr = [1,2]

func.apply(null, arr)  // => alert(3)

Пример передачи функции по ссылке

Функцию легко можно передавать в качестве аргумента другой функции.

Например, map берет функцию func, применяет ее к каждому элементу массива arrи возвращает получившийся массив:

1

var map = function(func, arr) {

2

    var result = [ ]

3

    for(var i=0; i<arr.length; i++) {

4

        result[i] = func(arr[i])

5

    }

6

    return result

7

}

Пример использования:

map(run, [10, 20, 30])  // = [1,2,3]

Или можно создать анонимную функцию непосредственно в вызове map:

// анонимная функция утраивает числа

map( function (a) { return a*3 } ,  [1,2,3])  // = [3,6,9]

Сворачивание параметров в объект

Бывают функции, аргументы которых сильно варьируются.

Например:

1

// можно указать только часть аргументов

2

// не указанные - вычисляются или берутся по умолчанию

3

function resize(toWidth, toHeight,  saveProportions, animate)  {

4

    // значения по умолчанию

5

    saveProportions = saveProportions || true

6

    animate = animate || true

7

    toHeight = toHeight || ...

8

}

Вызов с необязательными параметрами приходится делать так:

resize(100, null, null, true)

Чтобы избежать лишних null и сделать код более понятным, используют нечто вроде "keyword arguments", существующих в Python и Ruby. Для этого много параметров пакуют в единый объект:

1

function resize(setup)  {

2

    // значения по умолчанию

3

    var saveProportions = setup.saveProportions || true

4

    var animate = setup.animate || true

5

    var toHeight = setup.toHeight || ...

6

}

Вызов теперь делается гораздо проще:

1

var setup = {toWidth: 100, animate: true}

2

 

3

resize(setup)

4

// или

5

resize({toWidth: 100, animate: true})

Так - куда понятнее. А если параметров больше 5, то вообще - единственный нормальный способ.

Кроме того, с объектом можно удобнее делать последовательности вызовов вроде:

1

var setup = {toWidth: 100, animate: true, saveProportions: false}

2

 

3

resize(setup)

4

 

5

setup.toWidth = 200

6

resize(setup)

Функции в Javascript - это вторая по важности (после объектов) конструкция в Javascript. Например, если нужно при наведении мыши на кнопку создать выпадающее меню или плавно развернуть вкладку - это всё делается с помощью функций.

Рассмотрим синтаксис функции:

<script type="text/javascript"> function имя функции (аргумент1,аргумент2...) { команды, которые должна исполнить функция;

return (переменные или другие объекты, которые должна возвратить функция.

Если таковых нет - return не пишем.); } </script>

Для вызова функции непосредственно в самом скрипте достаточно написать её имя и, если нужно, - её параметры, например, напишем и применим функцию, которая будет суммировать две переменные:

<script type="text/javascript"> var sa = 100;

var sha = 1;

function summa (a,b) { var sum = a + b;

return (sum); }

document.write(summa(sa,sha));/*это упрощенная запись, если не

понятно - вот неупрощенный код*/

var result = summa(sa,sha);

document.write(result);

</script>

Итак, - мы знаем как создать и применить в скрипте функции. Давайте научимся вызывать их с помощью кнопки на страничке. Для этого достаточно у параметра href вместо адреса прописать такой код: javascript:имя функции(/*и если нужно - то здесь можно прописать и её параметры*/); Давайте таким способом доделаем прошлый скрипт, чтобы вызывать функцию summ с помощью кнопки. Для этого нужно сверстать такой код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Сумма</title>

<script type="text/javascript"> var sa = 100;

var sha = 1;

function summa (a,b) { var sum = a + b;

return(sum); }

function wivodNaDispley()

{

document.write(summa(sa,sha));

} </script>

</head>

<body>

<h3 align="center"><a href="javascript:wivodNaDispley();">Вычислить</a></h3>

</body>

</html>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]