Соответственно есть вопрос, почему в 4 случае он указывает на window?
Потому что у вас logThis вызывается в глобальном контексте.
this
устанавливается при каждом вызове каждой функции. Т.е., это переменная, которая внутри каждой функции своя, как локальная.
function logThis() {
console.log('logThis', this);
}
class TestTwo {
constructor() {}
log() {
logThis();
console.log('TestTwo.log', this);
}
}
https://codesandbox.io/s/n4x93k3pplUPD: Тут как раз подоспела свежая статья на хабре:
https://habr.com/company/ruvds/blog/422089/