ресурс для начинающих веб-разработчиков
комплексные веб-услуги по созданию сайтов

Справочный материал по основным языкам программирования и верстки сайтов.

Готовая методика создания простых и сложных динамичных сайтов, с использованием PHP и MySQL.

Использование веб-редактора Adobe Dreamweaver в разработке сайтов.

Использование графических редакторов Adobe Flash, Adobe Photoshop, Adobe Fireworks в подготовке веб-графики.

Разработка веб-сайтов под "ключ".

Разработка отдельных фрагментов сайтов, консультации по вопросам верстки веб-страниц и веб-программирования.

Объект Function. Свойства и методы

Объект Function

Создание объекта Function

Стандартный способ определения функции.

Синтаксис:

function имя_функции(параметры) {
код
}

Существует и другой способ, основанный на выражении с ключевыми словами new Function. Согласно этому способу функция создается как экземпляр объекта Function:

имя_функции = new Function(["nap1",...[,"napN"], "оператор1;...[; onepaтopN]")

Названия всех параметров являются строковыми значениями. Они разделяются запятыми. Заключительная строка содержит операторы кода тела функции, разделенные точкой с запятой.

Вызов функции, определенной как экземпляр объекта Function, можно выполнить обычным способом:

имя_функции(параметры)

Рассмотрим пример.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Объект Function</title>

<script language="JavaScript">

strek=new Function("W","H","s=W*H;return s")

strek(6,8) //возвращает 48

document.write(strek(6,8))
// или
var a="s=W*H; return s"
strek=new Function("W","H", a)
strek(6,8) //возвращает 48
alert(strek(6,8))
</script>
</head>

<body>
</body>
</html>

В окне веб-браузера это будет выглядеть ТАК.

При любом задании функции, стандартном или с помощью ключевого слова new, автоматически создается экземпляр объекта Function, который обладает своими свойствами и методами.

Cвойства объекта Function

  • arguments – массив значений параметров, переданных функции.
  • Индексация элементов массива производится с 0. Поскольку это массив, он имеет свойства и методы объекта Array (в частности, свойство length — длина массива). Свойство argumentsприменяется в теле определения функции, когда требуется проанализировать параметры, переданные ей при вызове. Например, можно узнать, сколько в действительности было передано параметров, не являются ли их значения пустыми (0, null) и т. п. Это свойство особенно полезно при разработке универсальных библиотечных функций.

    Синтаксис выражения следующий:

    имя_функции.arguments

    Рассмотрим пример, где функция возвращает строку, содержащую значения параметров и их общее количество, которые были указаны в вызове функции (а не в ее определении!)

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Свойства объекта Function</title>
    <script language="JavaScript">
    function mystrug(a,b,c){
    var strug=mystrug.arguments.length

    var s=""
    for(i=0;i<mystrug.arguments.length;i++){
    s+=mystrug.arguments[i] + ","
    }
    return s+" Всего: " +strug

    }

    document.write(mystrug(4,"надо","Федя"))
    </script>
    </head>

    <body>
    </body>
    </html>

    В окне веб-браузера это будет выглядеть ТАК.

  • length – количество параметров, указанных в определении функции. Синтаксис:
  • имя_функции. length

    В отличие от свойства arguments, количество параметров функции можно определить в программе за пределами тела этой функции.

    Рассмотрим пример.

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Свойства объекта Function</title>
    <script language="JavaScript">
    function mystrug(a,b,c,d){
    var strug=mystrug.arguments.length /*кол-во переданных параметров*/


    return "Здесь: " +strug

    }
    mystrug(2,4) //2
    mystrug.length //4
    document.write(mystrug(2,4)+" Всего: "+mystrug.length)
    </script>
    </head>

    <body>
    </body>
    </html>

    В окне веб-браузера это будет выглядеть ТАК.

  • caller – содержит ссылку на функцию, из которой была вызвана данная функция; если функция не вызывалась из другой функции, то значение этого свойства равно null. Синтаксис:
  • имя_функции. caller

    В свойстве содержится все определение функции, из кото- рой была вызвана функция имя.функции.

    Рассмотрим пример.

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Свойства объекта Function</title>
    <script language="JavaScript">
    function myF(){
    myF1()
    }
    function myF1(){
    alert(myF1.caller)
    }
    myF()
    </script>
    </head>

    <body>
    </body>
    </html>

    В окне веб-браузера это будет выглядеть ТАК.

    Вызов функции myF() приведет к вызову функции myF1, которая выведет на экран окно с сообщением, содержащим код определения функции myF().

Методы объекта Function

  • toString() — возвращает определение функции в виде строки. Синтаксис:
  • имя_функции.toStrinд()

    Иногда этот метод используют в процессе отладки программ с помощью диалоговых окон.

    Рассмотрим пример.

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Методы объекта Function</title>
    <script language="JavaScript">
    function myF(a,b){
    return a*b/2
    }
    alert(myF.toString())
    </script>
    </head>

    <body>
    </body>
    </html>

    В окне веб-браузера это будет выглядеть ТАК.

  • apply([текущий_объект[, массив_параметров]])
  • call(текущий_объект[,пар1[, пар2[, ... , парN[]]]])

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

    Первый параметр, демонстрирующий работу обоих методов – это ссылка на объект, который для данной функции является текущим. Для многоуровневых функций, определенных в сценарии, используется ключевое слово this, которое означает, что контекстом функции становится текущий объект(как для обычной функции). Если нет таких параметров, которые необходимо передать в функцию, в обоих методах их можно опустить.

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

    Рассмотрим пример.

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Методы объекта Function</title>
    <script language="JavaScript">
    /* функция-конструктор объекта car (автомобиль)*/
    function car(name,model,color){
    this.name=name //название
    this.model=model //модель
    this.color=color //цвет
    this.show=showcar //метод
    }
    /*функция, вызываемая как метод объекта car*/
    function showcar(){

    alert(this.name+"-"+this.model) //окно с сообщением
    }
    /*создание объекта car*/
    mycar=new car("Nissan", "Primera","green")
    mycar.show() /*стандартный способ вывода сообщения с использованием метода show к объекту car*/
    </script>
    </head>

    <body>
    </body>
    </html>

    В окне веб-браузера это будет выглядеть ТАК.

    Обычный способ применения метода show к объекту car (вывод окна с сообщением) выглядит так: mycar.show()

    При этом в действительности вызывается функция showcar(), заданная для этого метода. Текущий объект рассматривается как контекст для ссылок this, указанных в теле функции.

    Однако методы apply() и call() позволяют не связывать функцию showcar() с объектом mycar.Более того, в конструкторе объекта саг можно не указывать выражение, определяющее функцию showcar() в качестве метода объекта. Вместо этого можно вызвать метод showcarкак объект и применить к нему метод call(), указав в качестве параметра mycar как текущий объект:

    showcar.call(mycar)

    С помощью метода call() можно передавать параметры, отделенные друг от друга запятыми. Если параметры определены как элементы массива, то вместо call() используется метод apple().