Объект Function
Функции (см. 4.4.5) создаются в JavaScript с помощью следующего предложения:
function имя-функции (параметр-1, параметр-2, ..., параметр-n)
{
тело-функции
}
Функцию в JavaScript можно также создать как объект типа Function с помощью следующего предложения:
var имя-функции = new Function(параметр-1, параметр-2, ..., параметр-n, тело-функции)
Последним в списке параметров конструктора Function всегда является тело-функции (если функция не имеет параметров, то тело-функции – единственный параметр конструктора).
Объект типа Function можно также создать с помощью прямого вызова функции-конструктора (без ключевого слова new).
И первый, и второй способ создания функции являются равнозначными, однако в первом способе имя функции является константой, а во втором – именем объектной переменной типа Function.
Пример 4.4.57. Создание и использование объекта Function:
// Функция сложения - объект типа Function
addOp = new Function("x", "y", "return x + y;");
// Функция вычитания - определение
function substractOp(x, y)
{
return x - y;
|
|
}
// Функция выполнения операций сложения
// и вычитания над двумя операндами
function arithOp(a, operator, b)
{
// Начальное значение переменной-функции
operationFunction = null;
// Если оператор сложения
if(operator == "+")
// Присвоение переменной-функции
// имени функции сложения
operationFunction = addOp;
// Если оператор вычитания
if(operator == "-")
// Присвоение переменной-функции
// имени функции вычитания
operationFunction = substractOp;
// Если неверный оператор
if(operationFunction == null)
// Возврат нечислового значения
return Number.NaN
else
// Вызов переменной-функции
// и возврат результата операции
return operationFunction(a, b);
}
…
// Присвоение значений операндам
x = 5;
y = 8;
// Вызов функции arithOp для разных операций
z1 = arithOp(x, "+", y);
z2 = arithOp(x, "-", y);
z3 = arithOp(x, "*", y);
// Вывод результатов
alert("z1=" + z1 + " z2=" + z2 +
" z3=" + z3);
В этом фрагменте сценария иллюстрируется использование объектов и переменных-функций.
Вывод фрагмента будет иметь следующий вид: