Ключевое слово this

Пример:


var person = {
    firstName: "John",
    lastName : "Doe",
    id       : 5566,
    fullName : function() {
         return this.firstName + " " + this.lastName;
}; 

Что такое "this"?

В определении функции this ссылается на "владельца" функции.

В примере, приведенном выше, this ссылается на объект person. Объект person "владеет" методом fullName.

Связывание по умолчанию

При использовании отдельно, this указывает на глобальный объект.

В браузере глобальным объектом является [object Window].

Внутри функции this указывает на владельца функции, которым является глобальный объект.


function myFunction() {
    return this;
} 

В строгом режиме this будет иметь значение undefined, так как строгий режим запрещает связывание по умолчанию:


"use strict";
function myFunction() {
    return this;
} 

В обработчике события HTML this указывает на HTML элемент, получивший это событие:


<button onclick="this.style.display='none'">
  Нажми на меня, и я исчезну!
</button>

Связывание методов и свойств объекта

В следующем примере this это объект person (Объект person является "владельцем" функции):


var person = {
    firstName: "John",
    lastName : "Doe",
    id       : 5566,
    fullName : function() {
        return this.firstName + " " + this.lastName;
    }
}; 

Другими словами: this.firstName означает свойство firstName этого (person) объекта.

Явное связывание функции

У JavaScript есть предопределенные методы call() и apply().

Оба эти метода могут использоваться для вызова метода объекта с другим объектом в качестве параметра.

В следующем примере, при вызове person1.fullName с объектом person2 в качестве параметра, this будет обращаться к объекту person2, даже если это метод объекта person1:


var person1 = {
    fullName: function() {
        return this.firstName + " " + this.lastName;
    }
}
var person2 = {
    firstName:"John",
    lastName: "Doe",
}

person1.fullName.call(person2);  // Вернет "John Doe"