51. Вызов функции.
В JavaScript функции могут вызываться четырьмя способами:
- как функции
- как методы
- как конструкторы
- косвенно, с помощью методов
call()
иapply()
Вызов функции как функции
Выполняется в виде выражения вызова.
var h = hypotenuse(3, 4);
Контекст вызова в нестрогом режиме и в ECMAScript 3 = глобальный объект, а в строгом режиме = undefined
.
Вызов функции как метода
Метод – функция, которая хранится в свойстве объекта.
Вызов метода = выражение обращения к свойству + выражение вызова.
Контекстом вызова является объект, у которого выполняется обращение к свойству (вызывается метод).
Контекст вызова определяется именно способом вызова функции (а не местом вызова, как можно подумать)! Это важно, если функция, которая вызывается как метод, вызывает свою вложенную функцию как функцию.
Вызов функции как конструктора
Это вызов функции (как функции или как метода), который предварён ключевым словом new.
- Создаётся новый объект и назначается в качестве
this
. - Отрабатывает функция.
- Возвращаемым значением функции всегда будет объект – либо объект после return, либо созданный на шаге 1 (если return отсутствует или возвращает не объект).
Если функция вызывается как конструктор и не имеет аргументов, то можно не указывать круглые скобки после её имени.
Косвенный вызов
Любая функция – это особый объект.
У этого объекта есть методы call() и apply().
Оба принимают в качестве первого аргумента контекст вызова функции.
Далее идут аргументы функции: у call() через запятую, у apply() – в виде массива (или в виде объекта, подобного массиву).
Первый аргумент call()
и apply()
:
В строгом режиме всегда становится контекстом вызова «как есть».
В нестрогом режиме: если это null или undefined – контекстом будет глобальный объект, если это примитивное значение – контекстом будет объект-обёртка.