И вот, в продолжение предыдущего сообщения, когда ты вызываешь эти методы, то что происходит:
динамический this метода dog.jumps() привязывается к объекту, который вызывает метод, то есть this === dog, динамический this метода cat.jumps() берет внешний this по отношению к объекту, который вызывает метод, то есть this === window.
Если бы ты внутри метода dog.jumps() вызывал метод cat.jumps(), то this был бы равен dog.
Это не так просто для понимания, знаю, но что делать)))
this не относится к лексическому окружению, только к динамическому, то есть стрелочная функция берет this извне, то есть в случае с котиками он будет ссылаться на window