[Содержание] [Предыдущая] [Следующая] [Индекс]

Function

Определяет строку кода JavaScript, которую нужно компилировать как функцию.

Основной объект
Реализовано в Navigator 3.0, LiveWire 1.0
Navigator 4.0: добавлено свойство
arity.

Создание

Конструктором Function:

new Function (arg1, arg2, ... argN, functionBody)

Параметры

arg1, arg2, ... argN
(Опционально) Имена, которые используются функцией как формальные имена параметров. Каждый из них должен быть строкой, которая соответствует допустимому идентификатору JavaScript; например "x" или "theForm".
functionBody
Строка, содержащая инструкции JavaScript, включающие определение функции.

Описание

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

В дополнение к определению функций как описано здесь, Вы можете также использовать выражение function, как описано в Руководстве по JavaScript.

Резюме Свойств

arguments
Массив, соответствующий параметрам, переданным функции.
arity
Указывает число параметров, ожидаемых функцией.
caller
Определяет, какие функции вызываются текущей функцией.
prototype
Позволяет добавлять свойства к объекту Function.

Резюме Методов

toString
Возвращает строку, представляющую определенный объект.

Определение переменной типа объекта Function

Следующий код присваивает функцию пременной setBGColor. Эта функция устанавливает цвет фона текущего документа.

var setBGColor = new Function("document.bgColor='antiquewhite'")
Чтобы вызвать объект Function, Вы можете определить имя переменной, как будто она функция. Следующий код выполняет функцию, определенную переменной setBGColor:

var colorChoice="antiquewhite"
if (colorChoice=="antiquewhite") {setBGColor()}
Вы можете назначить функцию обработчику события одним из следующих способов:

document.form1.colorButton.onclick=setBGColor
<INPUT NAME="colorButton" TYPE="button"
   VALUE="Change background color"
   onClick="setBGColor()">
Создание переменной setBGColor, показанное выше, подобно объявлению следующей функции:

function setBGColor() {
   document.bgColor='antiquewhite'
}
Назначение функции переменной подобно объявлению функции, но имеет отличия:

Определение параметров объекта Function

Следующий код определяет объект Function, который принимает два параметра.

var multFun = new Function("x", "y", "return x * y")
Строковые параметры "x" и "y" являются формальными именами параметров, которые используются в теле функции, "return x * y".

Следующий код показывает несколько способов вызова функции multFun:

var theAnswer = multFun(7,6)
document.write("15*2 = " + multFun(15,2))
<INPUT NAME="operand1" TYPE="text" VALUE="5" SIZE=5>
<INPUT NAME="operand2" TYPE="text" VALUE="6" SIZE=5>
<INPUT NAME="result" TYPE="text" VALUE="" SIZE=10>
<INPUT NAME="buttonM" TYPE="button" VALUE="Multiply"
   onClick="document.form1.result.value=
      multFun(document.form1.operand1.value,
         document.form1.operand2.value)">
Вы не можете вызвать функцию multFun в свойстве обработчика события объекта, потому что свойства обработчика события не могут принимать параметры. Например, Вы не можете вызвать функцию multFun устанавливая свойство кнопки onclick следующим образом:

document.form1.button1.onclick=multFun(5,10)

Определение обработчика события с объектом Function

Следующий код назначает функцию обработчику события окна onFocus (обработчик события должен быть записан буквами в нижнем регистре):

window.onfocus = new Function("document.bgColor='antiquewhite'")
Если Вы имеете ссылку на объект Function, Вы можете использовать ее подобно функции, и она преобразуется из объекта в функцию:

window.onfocus()
Обработчики событий не принимают параметры, так что Вы не можете объявлять параметры в конструкторе Function для обработчика события.

Примеры

Пример 1. Следующий пример создает обработчики событий onFocus и onBlur для кадра. Этот код содержится в том же самом файле, который содержит тэг FRAMESET. Обратите внимание, что это единственный способ создать обработчики событий onFocus и onBlur для кадра, потому что Вы не можете определять обработчики событий в тэге FRAME.

frames[0].onfocus = new Function("document.bgColor='antiquewhite'")
frames[0].onblur = new Function("document.bgColor='lightgrey'")
Пример 2. Вы можете определить, существует ли функция, сравнивая имя функции с null. В следующем примере, func1 вызывается, если функция noFunc не существует; иначе вызывается func2. Обратите внимание, что необходимо имя окна, когда используется ссылка на имя функции noFunc.

if (window.noFunc == null)
   func1()
else func2()

Свойства

arguments

Массив, соответствующий параметрам, переданным функции.

Свойство объекта Function
Реализовано в Navigator 3.0, LiveWire 1.0
Navigator 4.0

Описание

Вы можете вызвать функцию с большим количеством параметров чем формально объявлено, используя массив arguments. Эта методика полезна, если функции может быть передано переменное число параметров. Вы можете использовать arguments.length, чтобы определить число параметров, переданных функции, и затем обрабатывать каждый параметр, используя массив arguments.

Массив arguments доступен только внутри объявления функции. Попытка обратиться к массиву arguments снаружи объявления функции приводит к ошибке.

Ключевое слово this не ссылается на текущую выполняющуюся функцию, так что Вы должны ссылаться к функциям и объектам Function по имени, даже внутри тела функции. В JavaScript 1.2, arguments включает дополнительные свойства:

Например, следующий сценарий демонстрирует некоторые свойства arguments:

<SCRIPT> 
function b(z) { 
   document.write(arguments.z + "<BR>")
   document.write (arguments.caller.x + "<BR>")
   return 99
}
function a(x, y) { 
   return b(534)
}
document.write (a(2,3) + "<BR>") 
</SCRIPT>
Это показывает:

534
2
99

534 является фактическим параметром функции b как значение arguments.z.

2 фактический параметр x функции a (доступной внутри b) как значение arguments.caller.x.

99 то, что возвращает a(2,3).

Примеры

Этот пример определяет функцию, которая создает HTML списки. Единственный формальный параметр функции это строка "U", если список должен быть неупорядоченным (пометченным символом), или "O", если список должен быть упорядоченным (пронумерованным). Функция определена следующим образом:

function list(type) {
   document.write("<" + type + "L>")
   for (var i=1; i<list.arguments.length; i++) {
      document.write("<LI>" + list.arguments[i])
      document.write("</" + type + "L>")
   }
}
Вы можете передавать любое число параметров этой функции, и она покажет каждый параметр как элемент в списке. Например, следующий запрос к функции

list("U", "One", "Two", "Three")
приводит к этому выводу:

<UL>
<LI>One
<LI>Two
<LI>Three
</UL>
В server-side JavaScript, Вы можете делать тот же самый вывод, вызывая функцию write вместо использования document.write.

arity

Когда атрибут LANGUAGE тэга SCRIPT равен "JavaScript1.2", это свойство показывает количество параметров, ожидаемых функцией.

Свойство объекта Function
Реализовано в Navigator 4.0, Netscape Server 3.0

Описание

arity является внешним к функции, и указывает, сколько параметров функция ожидает. В противоположность, arguments.length обеспечивает число параметров, фактически переданных функции.

Пример

Следующий пример демонстрирует использование arity и arguments.length.

<SCRIPT LANGUAGE = "JavaScript1.2">
function addNumbers(x,y){
   document.write("length = " + arguments.length + "<BR>")
   z = x + y
}
document.write("arity = " + addNumbers.arity + "<BR>")
addNumbers(3,4,5)
</SCRIPT>
Этот сценарий запишет:

arity = 2
length = 3

caller

Возвращает имя функции, которая вызвала в настоящее время выпоняющуюся функцию.

Свойство объекта Function
Реализовано в Navigator 3.0, LiveWire 1.0

Описание

Свойство caller доступно только внутри тела функции. Если оно используется снаружи определения функции, свойство caller равно null.

Если в настоящее время выпоняющаяся функция была вызвана программой JavaScript верхнего уровня, значение caller равно null.

Ключевое слово this не ссылается на текущую выполняющуюся функцию, так что Вы должны ссылаться к функциям и объектам Function по имени, даже внутри тела функции.

Свойство caller ссылается на вызвавшую функцию так

Примеры

Следующий код проверяет значение свойства caller функции.

function myFunc() {
   if (myFunc.caller == null) {
      alert("The function was called from the top!")
   } else alert("This function's caller was " + myFunc.caller)
}

Смотрите также

Function.arguments

prototype

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

Свойство объекта Object
Реализовано в Navigator 3.0, LiveWire 1.0

Описание

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

fun.prototype.name = value
где

fun
Имя функции конструктора объекта, которую Вы хотите изменить.
name
Имя свойства или метода, который будет создан.
value
Значение, инициализирующее назначенное новое свойство или метод.

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

var array1 = new Array();
var array2 = new Array(3);
Array.prototype.description=null;
array1.description="Содержит некоторый материал"
array2.description="Содержит некоторый материал"
После того, как Вы устанавливаете свойство для прототипа, все последующие объекты, созданные с типом Array будут иметь свойство:

anotherArray=new Array()
anotherArray.description="В настоящее время пусто"

Примеры

Следующий пример создает метод str_rep и использует выражение String.prototype.rep = str_rep, чтобы добавить метод ко всем объектам String. Все объекты, созданные new String(), затем имеют этот метод, даже если объекты уже были созданны. Затем пример создает альтернативный метод и добавляет его к одному из объектов String, используя выражение s1.rep = fake_rep. Метод str_rep других объектов String не изменяется.

var s1 = new String("a")
var s2 = new String("b")
var s3 = new String("c")
// Создаем метод повторяющий строку N раз для всех объектов String
function str_rep(n) {
var s = "", t = this.toString()
while (--n >= 0) s += t
return s
}
String.prototype.rep = str_rep
// Отображаем результаты
document.write("<P>s1.rep(3) выводит " + s1.rep(3)) // "aaa"
document.write("<BR>s2.rep(5) выводит " + s2.rep(5)) // "bbbbb"
document.write("<BR>s3.rep(2) выводит " + s3.rep(2)) // "cc"
// Создаем альтернативный метод и назначаем его только одной переменной String
function fake_rep(n) {
return "повторяем " + this + n + " раз."
}
s1.rep = fake_rep
document.write("<P>s1.rep(1) выводит " + s1.rep(1)) // "повторяем a 1 раз."
document.write("<BR>s2.rep(4) выводит " + s2.rep(4)) // "bbbb"
document.write("<BR>s3.rep(6) выводит " + s3.rep(6)) // "cccccc"
Этот пример производит следующий вывод:

s1.rep(3) выводит aaa
s2.rep(5) выводит bbbbb
s3.rep(2) выводит cc
s1.rep(1) выводит повторяем a1 раз.
s2.rep(4) выводит bbbb
s3.rep(6) выводит cccccc
Функция в этом примере также работает для объекта String не созданного конструктором String. Следующий код возвращает "zzz".

"z".rep(3)

Методы

toString

Возвращает строку, представляющую определенный объект.

Метод объекта Function
Реализовано в Navigator 3.0, LiveWire 1.0

Синтаксис

toString()

Параметры

Нет.

Описание

Каждый объект имеет метод toString, который автоматически вызывается, когда объект должен представиться как текстовое значение или когда объект упоминается в строковой конкатенации.

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

Для объекта Function, встроенный метод toString декомпилирует функцию обратно в исходник JavaScript, который определяет функцию. Эта строка включает ключевое слово function, список параметров, изогнутые фигурные скобки и тело функции.

Например, Вы имеете следующий код, который определяет тип объекта Dog и создает объект theDog типа Dog:

function Dog(name,breed,color,sex) {
   this.name=name
   this.breed=breed
   this.color=color
   this.sex=sex
}
theDog = new Dog("Gabby","Лаборатория","шоколад","девушка")
Когда Dog используется в контексте строки, JavaScript автоматически вызывает функцию toString, которая возвращает следующую строку:

function Dog(name, breed, color, sex) { this.name = name; this.breed = breed; this.color = color; this.sex = sex; }
Для информации об определения Вашего собственного метода toString, смотрите метод Object.toString.


[Содержание] [Предыдущая] [Следующая] [Индекс]

Последняя Модификация: 10/31/97 16:00:33


Права © 1997 Netscape Communications Corporation



Все мессаги сюда:yanich@inbox.ru
Hosted by uCoz