See, people talk about late binding like it's a good thing... I don't get that. But then people say a LOT of things about JavaScript that 100% contradicts everything I learned about good programming the past four decades or so.
I also fail to see how using less code and showing off prototypes is "quite messy".Much less using objects for what they are actually for -- mutability, inheritance, and self-determining data structures -- is somehow "not doing justice" to how they are "meant to be used".
If anything makes using how they"re "Meant to be used" hard it's stuff LIKE "late binding", manually having to create a instance that's in a unreleased local scope, cloning it, then manually at runtime applying properties that should have been determined at the parsing stage.
And honestly, give how classes work and how they DIFFER from traditional objects, this whole "the JS VM uses the same code under the hood" kind of sets off my bullshit alarm... given that instances/inheritance are tracked, methods of prototypes (classes) do not exist until you create an instance... I mean sure Object.prototype can kind-of deliver that as can Object.definePropert(y/ies), but it's all an ugly kludge bespeaking a bad mechanism that if they are in fact using on the back end? Then they're leaving most of the advantages of ACTUAL OOP out.
Though I can't say I'm surprised you bring the "object binding" rubbish into it. Not a fan as it's not something classes or their instances should "need" to do in the first place, which is why most OOP languages other and JS and Java don't have it, need it, or want it. It's another fudging of bloated convoluted syntax to make up for the lack of proper objects.
But again, I'm amazed how many people will defend writing two to ten times the code, taking two to ten times as many steps to execute, and run around patting each-other on the back about it.