`this` зависит от области видимости объекта, с которой он был вызван.

Давайте возьмем этот пример из изображения ниже

здесь, когда мы вызываем a.getName1.getName2(), мы получаем контекст getName1.

Зачем?

Потому что здесь getName2 является частью объекта getName1

здесь, когда мы вызвали a.getName1(), вы получите контекст окна.

Зачем?

здесь getName2 не является частью getName1, поэтому всякий раз, когда функция не является частью какого-либо объекта, this будет ссылаться на объект окна.

Тогда как насчет нового ключевого слова

Всякий раз, когда вы используете ключевое слово anew, оно всегда будет возвращать экземпляр класса (функция-конструктор).

Например, console.log(new a()) вернет вам объект a.

При запуске фрагмента кода слева консоли instance of a