Как мы видели, в теле функции свойство length массива arguments определяет ко_ личество аргументов, переданных этой функции. Однако свойство length самой функции имеет другой смысл. Это доступное только для чтения свойство возвра_ щает количество аргументов, которое функция ожидает получить, т. е. объяв_ ленных в ее списке параметров. Вспомним, что функция может вызываться с любым количеством аргументов, которые могут быть извлечены через массив arguments, независимо от того, сколько их объявлено. Свойство length объекта Function в точности определяет, сколько объявленных параметров имеется у функции. Обратите внимание: в отличие от свойства arguments.length, указан_ ное свойство length доступно как внутри, так и вне тела функции.
В следующем фрагменте определяется функция с именем check(), получающая массив аргументов от другой функции. Она сравнивает свойство arguments.length
со свойством Function.length (доступным как arguments.callee.length) и проверя_ ет, передано ли функции столько аргументов, сколько она ожидает. Если это не так, генерируется исключение. За функцией check() следует тестовая функция f(), демонстрирующая порядок вызова функции check():
function check(args) {
var actual =
args.length;
//
Фактическое число аргументов
var expected
= args.callee.length;
//
Ожидаемое число аргументов
if (actual != expected) {
//
Если числа не совпадают, генерируется исключение
throw new Error("неверное число аргументов: ожидается: " +
expected
+ "; фактически передано
" + actual);
}
}
function f(x, y, z) {
// Проверяем, соответствует ли ожидаемому фактическое количество
// аргументов. Если не соответствует, генерируем исключение check(arguments);
// Теперь выполняем оставшуюся часть функции обычным образом