JavaScript Вызов функций
Функции JavaScript имеют 4 способа вызова.
Разница между каждым методом заключается вthisинициализации
thisKeywords
Вообще говоря, в JavaScript this указывает на текущий объект при выполнении функции.
![]() |
Примечаниеthis— зарезервированное ключевое слово, вы не можете изменять значениеthis. |
|---|
Вызов функций JavaScript
В предыдущих главах мы узнали, как создавать функции.
Код внутри функции выполняется после вызова функции.
Вызов как функции
Пример
Попробуйте сами »
Приведённая выше функция не принадлежит никакому объекту. Но в JavaScript она всегда является глобальным объектом по умолчанию.
В HTML глобальным объектом по умолчанию является сама HTML-страница, поэтому функция принадлежит HTML-странице.
Объектом страницы в браузере является окно браузера (объект window). Приведённая выше функция автоматически становится функцией объекта window.
myFunction() и window.myFunction() — это одно и то же:
Пример
Попробуйте сами »
![]() |
Это распространённый способ вызова функций JavaScript, но это не является хорошей практикой программирования. Глобальные переменные, методы или функции могут легко вызывать ошибки из-за конфликтов имён. |
|---|
Глобальный объект
Когда функция вызывается не своим собственным объектом,thisзначением this становится глобальный объект.
В веб-браузере глобальным объектом является окно браузера (объект window).
В этом примере возвращаетсяthisзначением this является объект window:
Пример
Попробуйте сами »
![]() |
Вызов функции как глобального объекта делаетthisзначение this глобальным объектом. Использование объекта window в качестве переменной может легко привести к сбою программы. |
|---|
Вызов функции как метода
В JavaScript можно определить функцию как метод объекта.
В следующем примере создаётся объект (myObject), объект имеет два свойства (firstNameиlastName), и метод (fullName):
Пример
Попробуйте сами »
fullNameМетод — это функция. Функция принадлежит объекту.myObjectявляется владельцем функции.
thisОбъект, которому принадлежит код JavaScript. В примере,thisзначение this — этоmyObjectобъект.
Проверьте! ИзменитеfullNameметод и вернитеthisзначение:
Пример
Попробуйте сами »
![]() |
Вызов функции как метода объекта делаетthisзначением this — сам объект. |
|---|
Вызов функции с помощью конструктора
Если вызову функции предшествует ключевое словоnew, то это вызов конструктора.
Это выглядит как создание новой функции, но на самом деле функции JavaScript — это объекты, создаваемые заново:
Пример
Попробуйте сами »
Вызов конструктора создаёт новый объект. Новый объект наследует свойства и методы конструктора.
![]() |
В конструкторе ключевое словоthisне имеет значения. thisЗначение this создаётся, когда вызов функции создаёт экземпляр объекта (новый объект). |
|---|
Вызов функции как метода функции
В JavaScript функции являются объектами. У функций JavaScript есть собственные свойства и методы.
call()иapply()являются предопределёнными методами функций.
Пример
Попробуйте сами »
Пример
Попробуйте сами »
Оба метода используют сам объект в качестве первого параметра. Разница между ними заключается во втором параметре: apply принимает массив аргументов, то есть несколько аргументов объединяются в массив и передаются, тогда как call передаёт их как аргументы call (начиная со второго параметра).
В строгом режиме JavaScript при вызове функции первый параметр становитсяthisзначением this, даже если параметр не является объектом.
В нестрогом режиме JavaScript, если первый параметр равен null или undefined, вместо него будет использоваться глобальный объект.
![]() |
С помощью методов call() или apply() можно задатьthisзначение this и вызвать функцию как новый метод существующего объекта. |
|---|
