I think also having classical object creation is a bit easier to optimize vs prototypes. But it ought to be able to optimize both using some compiler heuristics. Although not every case of prototype-based object creation can be optimized, obviously ones that kinda look like a class creation would be easier (think what TypeScript generates).

With how fast it JavaScript is these days, and JavaScript is not really the best example of an easy to optimize dynamic language. It makes me wonder if you made a dynamic language, still with duck typing and types as values but with some minor modifications (eg: classes, richer numeric types) to help with static optimizations could be made to be C++ fast. Anyway I'd definitely like to learn more about this sort of thing.