Метод – это функция, которая хранится в виде свойства объекта.
Возвращаемые значения обрабатываются точно также, как и при вызове обычной функции. Однако есть одно важное отличие. Любая функция, используемая как метод, фактически получает неявный аргумент – объект, относительно которого она была вызвана. Тело функции получает возможность ссылаться на объект с помощью ключевого слова this.
var calculator = { operand1:1, operand2:1, add: function(){ this.result = this.operand1+this.operand2; } } calculator.add(); calculator.result; // вернет 2
В отличии от переменных, ключевое слово this не имеет областей видимости. И вложенные функции не наследуют значение this вызываемой функции. Чтобы разобраться с поведением this рассмотрим еще один пример:
var obj = { hello: function(){ return “Привет ” + this.username }, username: “Миша” }; obj.hello(); // Привет Миша
Обратите внимание на то, как hello ссылается на this. Теперь мы можем скопировать ссылку на ту же самую функцию и получить другой ответ.
var obj = { hello: obj.username, username: “Маша” }; obj.hello; // Маша
На самом деле в вызове метода вариант связывания this (получатель вызова), определяет само выражение вызова. Выражение obj.hello() ищет свойство hello объекта obj. А выражение obj2.hello ищет свойство hello объекта obj2.
Поскольку методы являются не чем иным, как функциями вызванными для конкретного объекта, сослаться на this может и обычная функция:
function hello(){ return “Привет ” + this.username }
Это может пригодится на предопределения функции для ее совместного использования несколькими объектами. Однако этот трюк в JavaScript редко и малоприменим.