JavaScript Обращение к функции
Код внутри JavaScript function
будет выполняться, когда "что-то" обращается к нему.
Обращение к JavaScript функции
Код внутри функции не выполняется, когда функция определена.
Код внутри функции выполняется, когда к функции обратились.
Обычно используется термин "вызов функции" вместо "обращение к функции".
Также часто говорят "вызвать функцию", "запустить функцию" или "выполнить функцию".
В этой главе учебника мы будем использовать обращение к функции, потому что к JavaScript функции можно обратиться без вызова.
Обращение к функции как функции
Пример
function myFunction(a, b) {
return a * b;
}
myFunction(10, 2); // вернёт 20
Попробуйте сами »
Функция выше не принадлежит ни одному объекту. Но в JavaScript всегда есть глобальный объект по умолчанию.
В HTML глобальным объектом по умолчанию является сама HTML страница, поэтому указанная выше функция "принадлежит" к HTML странице.
В браузере объект страницы является окном браузера. Функция выше автоматически становится функцией окна.
ФункциИ myFunction() и window.myFunction() являются одинаковыми:
Пример
function myFunction(a, b) {
return a * b;
}
window.myFunction(10, 2); // также вернёт 20
Попробуйте сами »
Это распространенный способ вызова функции JavaScript, но не очень хорошая практика.
Глобальные переменные, методы или функции могут легко создавать конфликты имен и ошибки в глобальном объекте.
Ключевое слово this
В JavaScript то, что называется this
, является объектом, который "владеет" текущим кодом.
Значение this
, когда используется в функции, является объектом, который "владеет" функцией.
Обратите внимание, что this
не является переменной. Это ключевое слово. Вы не можете изменить значение this
.
Подсказка: Вы можете прочитать больше про ключевое слово this
в разделе JS Ключевое слово this на нашем сайте.
Глобальный объект
Когда функция вызывается без объекта-владельца, значение this
становится глобальным объектом.
В веб-браузере глобальный объект - это окно браузера.
Этот пример возвращает объект окна как значение this
:
Пример
var x = myFunction(); // x будет объектом окна
function myFunction() {
return this;
}
Попробуйте сами »
Обращение к функции как к глобальной функции приводит к тому, что значение this будет глобальным объектом.
Использование объекта окна в качестве переменной может легко привести к краху вашей программы.
Вызов функции как метода
В JavaScript вы можете определить функции как методы объекта.
В следующем примере создается объект (myObject), с двумя свойствами (firstName и lastName), и методом (fullName):
Пример
var myObject = {
firstName:"Андрей",
lastName: "Щипунов",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName(); // Вернёт "Андрей Щипунов"
Попробуйте сами »
Метод fullName является функцией. Функция принадлежит объекту. myObject является владельцем функции.
То, что называется this
, является объектом, который "владеет" JavaScript кодом. В этом случае значение этого this
является myObject.
Попробуйте это! Измените метод fullName для возврата значения this
:
Пример
var myObject = {
firstName:"Андрей",
lastName: "Щипунов",
fullName: function () {
return this;
}
}
myObject.fullName(); // Вернёт [оbject Object]
Попробуйте сами »
Вызов функции как метода объекта приводит к тому, что значением this
является сам объект.
Вызов функции с помощью конструктора функций
Если вызову функции предшествует ключевое слово new
- это вызов конструктора.
Похоже на то, как вы создаете новую функцию, но поскольку функции JavaScript являются объектами, вы фактически создаёте новый объект:
Пример
// Это конструктор функции:
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// Это создаёт новый объект
var x = new myFunction("Андрей", "Щипунов");
x.firstName;
// вернёт "Андрей"
Попробуйте сами »
Вызов конструктора создает новый объект. Новый объект наследует свойства и методы от своего конструктора.
Ключевое слово this
в конструкторе не имеет значения.
Значение this
будет новым объектом, созданным при вызове функции.