Введение в JavaScript


Функция — объект


У любого типа данных JavaScript существует объектовая "обертка" — Wrapper, которая позволяет применять методы типов данных к переменным и литералам, а также получать значения их свойств. Например, длина строки символов определяется свойством length. Аналогичная "обертка" есть и у функций — объект   Function.

Например, увидеть значение функции можно не только при помощи метода valueOf(), но и используя метод toString():

function f_name(x,y) { return x-y; } document.write(f_name.toString()+"<br>");

Результат распечатки:

function f_name(x,y) { return x-y; }

Свойства функции доступны для программиста только тогда, когда они вызываются внутри функции. При этом обычно программисты имеют дело с массивом аргументов функции (arguments[]), его длиной (length), именем функции, вызвавшей данную функцию (caller)и прототипом (prototype).

Рассмотрим пример использования списка аргументов функции и его длину:

function my_sort() { a = new Array(my_sort.arguments.length); for(i=0;i<my_sort.arguments.length;i++) a[i] = my_sort.arguments[i]; b = a.sort(); return b; } b = my_sort(9,5,7,3,2) for(i=0;i<b.length;i++) document.write("b["+i+"]="+b[i]+"<br>");

Результат исполнения:

b[0]=2 b[1]=3 b[2]=5 b[3]=7 b[4]=9

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

function slave() { document.write(slave.caller+""); return slave.caller; } function master1() { slave(); } function master2() { slave(); } ... master1(); master2();

Результат исполнения двух последних строк:

function master1() { slave(); } function master2() { slave(); }

Еще одним свойством объекта   Function является prototype, но это общее свойство всех объектов, поэтому и обсуждать его мы будем в контексте типа данных   Object. Упомянем только о конструкторе объекта   Function:

f = new Function(arg_1,...,arg_n, body)

Здесь f — это объект класса Function. Его можно использовать и как обычную функцию. Конструктор используют для получения безымянных функций, которые назначают или переопределяют методы объектов. Здесь мы вплотную подошли к вопросу конструирования объектов. Дело в том, что переменные внутри функции можно рассматривать в качестве ее свойств, а функции – в качестве методов:

function Rectangle(a,b,c,d) { this.x0 = a; this.y0 = b; this.x1 = c; this.y1 = d; this.area = new Function( "return Math.abs(this.x0-this.x1)* Math.abs(this.y0-this.y1)"); this.perimeter = new Function( "return (Math.abs(this.x0-this.x1)+ Math.abs(this.y0-this.y1))*2"); } c = new Rectangle(0,0,100,100); document.write(c.area());

Результат исполнения:

10000

Обратите внимание еще на одну особенность — ключевое слово this. Оно позволяет сослаться на текущий объект, в рамках которого происходит исполнение JavaScript-кода. В данном случае это объект c класса Rectangle.




Начало  Назад  Вперед



Книжный магазин