В целом да, но довольно сложно написано )
Достаточно просто помнить главное: this — это объект, находящийся перед точкой в момент вызова.
Тогда все логично — почему undefined, если вызывать функцию просто func() — потому что нет объекта перед точкой. И остальные моменты.
Стрелочные наследуют из внешнего окружения, да.
this в конструкторах и функциях, которые вызваны через new привязан к новому, созданному объекту, да.