Основной объект | |
Реализовано в |
Navigator 3.0, LiveWire 1.0 Navigator 4.0: добавлено свойство arity .
|
Создание
Конструктором Function
:
new Function (arg1, arg2, ... argN, functionBody)
Параметры
Описание
Объекты Function
оцениваются каждый раз, когда они используются. Это менее эффективно чем объявление функции и вызов ее внутри Вашего кода, потому что объявляющиеся функции компилируются.
В дополнение к определению функций как описано здесь, Вы можете также использовать выражение function
, как описано в Руководстве по JavaScript.
| Возвращает строку, представляющую определенный объект. |
Определение переменной типа объекта 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
, который принимает два параметра.
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'")
Пример 2. Вы можете определить, существует ли функция, сравнивая имя функции с null. В следующем примере,
frames[0].onblur = new Function("document.bgColor='lightgrey'")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
.
callee
-- свойство, чье значение является ссылкой на функцию.
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 является фактическим параметром функции b как значение arguments.z
.
2 фактический параметр x функции a (доступной внутри b) как значение arguments.caller.x
.
Примеры
Этот пример определяет функцию, которая создает 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>
В server-side JavaScript, Вы можете делать тот же самый вывод, вызывая функцию
<LI>One
<LI>Two
<LI>Three
</UL>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>
caller
Возвращает имя функции, которая вызвала в настоящее время выпоняющуюся функцию.
Свойство объекта |
Function
|
Реализовано в | Navigator 3.0, LiveWire 1.0 |
Описание
Свойство caller
доступно только внутри тела функции. Если оно используется снаружи определения функции, свойство caller
равно null.
Свойство 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) выводит ccs1.rep(1) выводит повторяем a1 раз.
Функция в этом примере также работает для объекта
s2.rep(4) выводит bbbb
s3.rep(6) выводит ccccccString
не созданного конструктором String
. Следующий код возвращает "zzz"
.
"z".rep(3)
Методы
toString
Возвращает строку, представляющую определенный объект.
Метод объекта |
Function
|
Реализовано в | Navigator 3.0, LiveWire 1.0 |
Синтаксис
toString()
Параметры
Нет.
Описание
Каждый объект имеет метод toString
, который автоматически вызывается, когда объект должен представиться как текстовое значение или когда объект упоминается в строковой конкатенации.
Для объекта Function
, встроенный метод toString
декомпилирует функцию обратно в исходник JavaScript, который определяет функцию. Эта строка включает ключевое слово function
, список параметров, изогнутые фигурные скобки и тело функции.
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
Все мессаги сюда:yanich@inbox.ru |