I have adopted many ECMA innovations quickly and happily. One that I have not is the new class sugar. To me, it violates JS clarity.I have never been a fan of "new thing()" because it creates a brand new "this". In my view, that is a weird global variable that is ripe for abuse and bugs, especially so since all of its properties are, by definition, mutable. Worse, for me, properties of this are exposed to the outside world. Preventing that requires additional code that does not contribute to the actual functionality.
When arrow functions showed up and gave us control over our 'this' and closure context, I devised the pattern of using a function initializer. It replaces properties of 'this' with closure variables that never can leak to the outside world by accident. Internal values can be mutable or not using normal 'let' and 'const'.
It is true that I absolutely never use inheritance in other languages that I use (PHP and C#). I have drunk "composition over inheritance" koolaid to the point of addiction, or devotion, or certainty.
So I ask, what am I missing? Should I be using classes? It seems a lot of people prefer it but I don't understand why.
Your thoughts, observations, comments?