I'm guessing that each function is actually compiled once into static code, wherever it appears, but the closure is passed to it as an implicit object, and there is very little price for having 40 variables in the closure vs 1

something you'll notice is that Object.defineProperty/ies isn't particularly fast, so it's generally better to do that like once during bootup rather than every time you instantiate the object. If the object has to be instantiated often, you'll notice it

i had wanted to use a strategy like that for hiding private state in the promise implementation in angularjs last year, but it had a significant impact on benchmarks because promises are created pretty frequently

it's a bit hard to grok how everything is allocated and stored, but at the very least you'll have code space for each of your getters and setters, you'll have accessor info for the property, you'll have map space for the property itself, you'll probably have a few map transitions on the heap for each schema (but you'd have those anyways because you need to use a dynamic list of properties)

I just tested my front-end framework's speed. Apparently it's able to initialize 750 components in 2.8 seconds ... that's about 3 microseconds per component. I don't know if it's fast, or not. How fast does AngulerJS do it?

instead of wasting time at run-time trying to do "magic" through dirty-checking (the model like angular, or the dom like react/mithril) it just asks the developer to explicitly say when something has changed.