В JavaScript, если функция принадлежит объекту, поведение доступа к функции через объект называется «вызов метода». В отличие от обычных вызовов функций, при создании вызова метода эта ссылка в функции изменится - это будет ссылаться на объект, используемый для вызова функции (этот объект станет контекстом вызова вызова метода):
Кода -копия выглядит следующим образом:
var x = 99;
var образец = {
x: 1,
act: function (a) {
this.x = a*a; // Присвоение значению образец X, а не x Global Object x.
}
}
Образец.ак (6);
Console.log (sample.x); // 36
Console.log (x); // 99
Как и доступ к свойствам в объектах, в дополнение к использованию DOT Operators, JavaScript также может использовать операторы кронштейнов для выполнения вызовов методов:
Кода -копия выглядит следующим образом:
// другие способы вызвать метод
образец ["act"] (7);
Console.log (sample.x); // 49
Для функций в JavaScript интересным поведением является внедрение функций (закрытия) в функции. При создании вызова метода, если в функции встроенной встроенной функции код в этой встроенной функции может получить доступ к значению внешней переменной:
Кода -копия выглядит следующим образом:
// Вложенная функция может получить доступ к переменной вне ее.
var y = 88;
var образец2 = {
y: 1,
Act2: функция (а) {
this.y = inner ();
функция inner () {
вернуть*a;
}
}
}
Образец2.act2 (8);
Console.log (sample2.y); // 64
Console.log (y); // 88
Однако, вопреки интуиции, код, встроенный в функцию, не может наследовать это извне; то есть в встроенной функции это относится не к объекту, который вызывает метод, а к глобальному объекту:
Кода -копия выглядит следующим образом:
// Вложенная функция не наследует «это». «Это» в вложенной функции - это глобальный объект
var образец3 = {
act3: function () {
внутренний();
функция inner () {
console.log (this); // окно -объект
}
}
}
Образец3.Act3 ();
Если вам действительно нужно получить доступ к объекту, который вызывает метод во встроенной функции, вы можете сохранить это значение в переменную во внешней функции:
Кода -копия выглядит следующим образом:
// передавать «это» в вложенную функцию
var образец4 = {
act4: function () {
var self = это;
внутренний();
функция inner () {
console.log (self); // Object {act4 = function ()}
}
}
}
sample4.act4 ();