вернуться к уроку

Связанная функция как метод

важность: 5

Что выведет функция?

function f() {
  alert( this ); // ?
}

let user = {
  g: f.bind(null)
};

user.g();

Ответ: null.

function f() {
  alert( this ); // null
}

let user = {
  g: f.bind(null)
};

user.g();

Контекст связанной функции жёстко фиксирован. Изменить однажды привязанный контекст уже нельзя.

Так что хоть мы и вызываем user.g(), внутри исходная функция будет вызвана с this=null. Однако, функции g совершенно без разницы, какой this она получила. Её единственное предназначение – это передать вызов в f вместе с аргументами и ранее указанным контекстом null, что она и делает.

Таким образом, когда мы запускаем user.g(), исходная функция вызывается с this=null.