Связанная функция как метод
важность: 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
.