JavaScript. Подробное руководство, 6-е издание, стр. 99
8.7.1. Свойство length
В теле функции свойство
<b>arguments.length</b><b>length</b>В следующем фрагменте определяется функция с именем
<b>check(),</b><b>arguments</b><b>arguments.length</b><b>arguments. callee.length</b><b>check()</b><b>f()</b><b>check():</b><b>// Эта функция использует arguments.callee, поэтому она </b><b>// не будет работать в строгом режиме, </b><b>function check(args) {</b><b> var actual = args.length; // Фактическое число аргументов</b><b> var expected = args.callee.length; // Ожидаемое число аргументов </b><b> if (actual !== expected) // Если не совпадают, генерируется исключение</b><b> throw new Еrror("ожидается: " + expected + получено " + actual);</b><b>}</b><b>function f(x, у, z) {</b><b> // Проверить число ожидаемых и фактически переданных аргументов. </b><b> check(arguments);</b><b> // Теперь выполнить оставшуюся часть функции как обычно </b><b> return х + у + z;</b><b>}</b>8.7.2. Свойство prototype
Любая функция имеет свойство prototype, ссылающееся на объект, известный как объект прототипа. Каждая функция имеет свой объект прототипа. Когда функция используется в роли конструктора, вновь созданный объект наследует свойства этого объекта прототипа. Прототипы и свойство prototype обсуждались в разделе 6.1.3, и мы еще раз вернемся к этим понятиям в главе 9.
8.7.3. Методы call() и apply()
Методы
<b>саll()</b><b>аррlу()</b><b>саll()</b><b>Object.prototype.toString </b><b>саll()</b><b>аррlу(),</b><b>this</b><b>f()</b><b>саll()</b><b>аррlу():</b><b>f.call(о); </b><b>f.apply(o);</b>Любой из этих способов вызова эквивалентен следующему фрагменту (где предполагается, что объект о не имеет свойства с именем m):
<b>о.m = f; // Временно сделать f методом о. </b><b>о.m(); // Вызывать его без аргументов,</b><b>delete о.m; // Удалить временный метод.</b>В строгом режиме ECMAScript 5 первый аргумент методов
<b>саll()</b><b>apply()</b><b>this</b><b>null</b><b>undefined</b><b>null</b><b>undefined</b>Все остальные аргументы метода
<b>саll(),</b><b>f()</b><b>f.call(o, 1, 2);</b>Метод
<b>аррlу()</b><b>саll(),</b><b>f.apply(o, [1,2]);</b>Если функция способна обрабатывать произвольное число аргументов, метод
<b>apply()</b><b>Math.max()</b><b>ар ply ():</b><b>var biggest = Math.max.apply(Math, array_of_numbers);</b>Обратите внимание, что метод
<b>apply()</b><b>аррlу().</b>