Какова связь между вызовом функции и ключевым словом this?
Я довольно новичок в JavaScript, и я только начал работать с .apply()
и другие методы, которые используют ключевое слово this
и я могу сказать, что this
имеет какое-то отношение к контексту, в котором вызывается функция, но я бы очень хотел понять, что именно this
имеет в виду.
Связь между вызовом определенной функции и this
выглядит похожим на отношения между объектом и свойством / методом.
Эти два отношения связаны в любом случае?
2 ответа
Согласно разделу 11.1.1 спецификации языка ECMAScript ответ
Ключевое слово this оценивает значение ThisBinding текущего контекста выполнения.
Вот три случая, которые вы можете рассмотреть. Они не описаны формально, а просто и интуитивно понятны:
Контекст по умолчанию
Если вы не указываете контекст и вызываете функцию (не метод), this
будет глобальным объектом:
function foo() {
console.log(this); //window
}
Установить контекст неявно
Если вы вызываете функцию, которая является методом данного объекта this
будет объектом перед последней точкой:
function foo() {
console.log(this);
}
var bar = {};
bar.foo = foo;
bar.foo(); //bar
bar.baz = {};
bar.baz.foobar = foo;
bar.baz.foobar(); //bar.baz
Установите контекст явно
Вы можете изменить контекст, используя call
, apply
, bind
:
function foo() {
console.log(this);
}
foo.call(1); //1
foo.call(window); //window
var bar = {};
bar.foo = foo;
bar.foo.apply(42); //42