Функции JavaScript может быть вызван 4 различными способами.
Каждый способ отличается тем , как this инициализируется.
this ключевое слово
В JavaScript вещь называется this , является объектом , который "владеет" текущий код.
Значение в this , при использовании в функции, является объектом , который "владеет" функцию.
Обратите внимание , что this не является переменной. Это ключевое слово. Вы не можете изменить значение this .
Вызов функции JavaScript
Вы уже узнали, что код внутри функции JavaScript будет выполняться, когда "что-то" вызывает его.
Код в функции не выполняется , когда функция определена. Он выполняется , когда функция вызывается.
Некоторые люди используют термин "вызов функции" вместо "вызова функции".
Кроме того, довольно часто, чтобы сказать: "Призываем функции", "запустить функцию", или "выполнить функцию".
В этом уроке мы будем использовать вызов, потому что функция JavaScript может быть вызван без вызова.
Вызов функции как функции
пример
function myFunction(a, b) {
return a * b;
}
myFunction(10, 2); // myFunction(10, 2) will return 20
Попробуй сам " Выше функция не принадлежит ни одному объекту. Но в JavaScript всегда есть глобальный объект по умолчанию.
В HTML глобальный объект по умолчанию является HTML-страница сама, поэтому функция выше "принадлежит" к странице HTML.
В браузере объект страницы в окне браузера. Выше функция автоматически становится функцией окна.
myFunction() и window.myFunction() выполняет те же функции:
пример
function myFunction(a, b) {
return a * b;
}
window.myFunction(10, 2); // window.myFunction(10, 2) will also return 20
Попробуй сам " Это обычный способ вызвать функцию JavaScript, но не очень хорошая практика.
Глобальные переменные, методы или функции могут легко создавать конфликты имен и ошибок в глобальном объекте.
Глобальный объект
Когда функция вызывается без объекта владельца, значение this становится глобальным объектом.
В веб-браузере глобальным объектом является окно браузера.
Этот пример возвращает объект окна в качестве значения , this :
пример
function myFunction() {
return this;
}
myFunction(); // Will return the window object
Попробуй сам " Вызов функции в качестве глобальной функции, вызывает значение this , чтобы быть глобальным объектом.
Использование объекта окна в качестве переменной может легко привести к сбою программы.
Вызов функции как метод
В JavaScript вы можете определить функцию в качестве методов объекта.
В следующем примере создается объект ( myObject ), с двумя свойствами ( firstName и lastName ) и способ ( fullName ):
пример
var myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName(); // Will return "John Doe"
Попробуй сам " fullName метод является функцией. Функция принадлежит к объекту. myObject является владельцем функции.
Вещь называется this , является объектом , который "владеет" код JavaScript. В этом случае значение this является myObject .
Попробуй это! Изменение fullName метод возвращает значение this :
пример
var myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this;
}
}
myObject.fullName(); // Will return [object Object] (the owner object)
Попробуй сам " Вызов функции в качестве метода объекта, вызывает значение this , чтобы быть сам объект.
Вызов функции с помощью функции конструктора
Если вызов функции предшествует с new ключевым словом, он является конструктором вызова.
Похоже, вы создаете новую функцию, но поскольку функции JavaScript являются объекты, которые вы на самом деле создать новый объект:
пример
// This is a function constructor:
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// This creates a new object
var x = new myFunction("John","Doe");
x.firstName;
// Will return "John"
Попробуй сам " Конструктор вызов создает новый объект. Новый объект наследует свойства и методы от своего конструктора.
this ключевое слово в конструктор не имеет значения.
Значение this будет новый объект , созданный при вызове функции.
Вызов функции с методом функций
В JavaScript функции являются объектами. JavaScript функции имеют свойства и методы.
call() и apply() предопределенные методы функции JavaScript. Оба метода могут быть использованы для вызова функции, и оба метода должны иметь объект владельцем в качестве первого параметра.
пример
function myFunction(a, b) {
return a * b;
}
myObject = myFunction.call(myObject, 10, 2); // Will return 20
Попробуй сам " пример
function myFunction(a, b) {
return a * b;
}
myArray = [10, 2];
myObject =
myFunction.apply(myObject, myArray); // Will also return 20
Попробуй сам " Оба метода принимают объект владельца в качестве первого аргумента. Единственное отличие состоит в том , что call() принимает аргументы функции по отдельности, и apply() принимает аргументы функции в массиве.
В JavaScript строгом режиме, первый аргумент становится значением this в вызываемой функции, даже если аргумент не является объектом.
В "нестрогой" режиме, если значение первого аргумента равно нулю или не определено, оно заменяется глобальным объектом.
С помощью call() или apply() вы можете установить значение this , и вызывать функцию как новый метод существующего объекта.