JavaScript Функция Invocation (вызова)
Код внутри JavaScript function
будет выполняться, когда её "что-то" вызывает.
JavaScript функция Invocation (вызова)
Код внутри функции не выполняется, если функция определена.
Код внутри функции выполняется при вызове функции.
Обычно используется термин "call a function" вместо "invoke a function".
Также часто говорят "вызов на функцию", "запустить функцию" или "выполнить функцию".
В этом учебнике мы будем использовать invoke, потому что JavaScript функция может быть вызвана без вызова (call).
Вызов функции как функции
Пример
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 на нашем сайте W3Schools на русском.
Глобальный объект
Когда функция вызывается без объекта-владельца, значение this
становится глобальным объектом.
В веб-браузере глобальным объектом является окно браузера.
В этом примере объект окна возвращается как значение this
:
Пример
let x = myFunction();
// x будет объектом окна
function myFunction() {
return this;
}
Попробуйте сами »
При вызове функции как глобальной функции значение this становится глобальным объектом.
Использование объекта окна в качестве переменной может легко привести к сбою вашей программы.
Вызов функции как метода
В JavaScript вы можете определять функции как методы объекта.
В следующем примере создается объект (myObject) с двумя свойствами (firstName и lastName), и методом (fullName):
Пример
const myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName(); // Вернёт "John Doe"
Попробуйте сами »
Метод fullName - это функция. Функция принадлежит объекту. myObject является владельцем функции.
То, что называется this
, является объектом, которым "владеет" JavaScript код. В этом случае значение this
является myObject.
Попробуй это! Измените метод fullName, чтобы он возвращал значение this
:
Пример
const myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this;
}
}
// Это вернет [объект Object] (объект-владелец)
myObject.fullName();
Попробуйте сами »
Вызов функции как метода объекта приводит к тому, что значение this
становится самим объектом.
Вызов функции с помощью конструктора функций
Если вызову функции предшествует ключевое слово new
, это вызов конструктора.
Похоже, вы создаете новую функцию, но поскольку функции JavaScript являются объектами, вы фактически создаете новый объект:
Пример
// This конструктор функции:
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// This создает новый объект
const myObj = new myFunction("John", "Doe");
// This вернёт "John"
myObj.firstName;
Попробуйте сами »
Вызов конструктора создает новый объект. Новый объект наследует свойства и методы своего конструктора.
Ключевое слово this
в конструкторе не имеет значения.
Значение this
будет новый объект, созданный при вызове функции.