Для объекта Function определено два свойства: caller и length. Эти свойства применимы как функциям, заданным с помощью определения функции, так и к функциям, созданным с помощью конструктора Function.
Свойство caller определено только во время выполнения функции, т.е. оно доступно только в теле функции. Это свойство имеет значение null, если функция вызывается с самого высшего уровня программы JavaScript в Web-странице. В противном случае свойство caller содержит текст функции, которая вызвала данную функцию. При этом, если функция задана с помощью определения, в тексте функция после ключевого слова function указывается имя функции. Если же функция задана как объект Function, после ключевого слова function указывается имя "anonymous". Свойство не работает в Web-браузере Opera.
Свойство length, определенное для имени функции, содержит количество аргументов, которое должно быть передано в функцию.
Для объекта определены также два метода apply() и call(), которые рассматриваются в следующем разделе (см. 4.4.12.3).
Пример 4.4.58. Использование свойства caller объекта Function:
|
|
// Функция вычитания - определение
function substractOp(x, y)
{
if(substractOp.caller == null)
alert("Функция substractOp вызвана сценарием");
else
alert("Функция substractOp вызвана функцией: " +
substractOp.caller);
return x - y;
}
// Функция вычитания абсолютных величин
function substractAbs(x, y)
{
x = Math.abs(x);
y = Math.abs(y);
return substractOp(x, y);
}
// Функция вычитания большего числа из меньшего
substractGT = new Function("x", "y",
"if (x < y) return substractOp(y, x); else " +
"return substractOp(x, y);");
…
// Присвоение значений операндам
x = 5;
y = 8;
// Вызов функций
u1 = substractOp(x, y);
u2 = substractAbs(x, y);
u3 = substractGT(x, y);
// Вывод результатов
alert("u1=" + u1 + " u2=" + u2 + " u3=" + u3);
В этом фрагменте сценария функция substractOp() первый раз вызывается непосредственно из сценария, второй раз – из функции substractAbs() и третий раз – из функции substractGT().
Вывод этого фрагмента имеет следующий вид: