Хорошо, давайте начнем с предпосылки, что у W3Schools репутация менее чем звездная, и вам не следует слишком задумываться о том, что они пишут. Фактически, вместо этого лучше читать MDN .
В обычных функциях ключевое слово this представляет объект, вызвавший функцию ...
Ну да, нет ... Объект ничего не вызывает. Объект просто есть. Это контейнер других вещей. Одним из таких «вещей» может быть функция. Тогда у вас может быть код , который берет функцию из этого «контейнера» и вызывает ее. Итак, код вызывает функции , независимо от того, являются ли эти функции свойством объектов или иным образом.
Как определяется this
внутри этой функции, зависит точно от того, как этот код вызывает функцию. В двух словах, в выражении a.b()
, this
внутри b
будет a
. Как правило, this
внутри функции будет тем, что было до .
, когда она была вызвана.
Если до вызова не было .
, например, просто b()
, нет this
(как именно это проявляется, зависит от строгого режима). Неважно, была ли эта функция изначально частью объекта или нет; все, что имеет значение, это точное выражение, которое использовалось для его вызова.
Для всех подробностей вы можете увидеть Как работает ключевое слово «this»? .
Сноска здесь в том, что вы можете bind
this
для функции или передать другую this
явно, используя call
или apply
и функции жирной стрелки вообще не следуют этому правилу.