Just looks like more JavaScript antipatterns, this time with some ES6 flavour.<p>We know how to "solve" the problem of encapsulation with JavaScript. It's not with closures, Symbols, or some other arbitrary hack. We do it by enforcing specific idioms that only require a developer to recognize <i>intent</i> instead of learning 80 different ways to do the same thing. You simply <i>put a single or double underscore</i> in front of the property name.<p>I read what I thought was a clever anecdote by another developer the other day, that the underscore in "obj._varname" indicates "here be dragons." It's an extremely simple idiom to teach new JavaScript developers.<p>I get it, JavaScript is robust. So you can do fun things like this! These are great experiments. But really, what are you accomplishing? You've now just thrown in a closure and a bunch of lines of code (defining your symbols, etc.) that any developer new to your codebase is going to look at like "... what the... what is going on here?" You can solve the problem easily with <i>one character</i>.<p>Consistency. Convention. Creating useful, easy-to-understand, repeatable idioms. That's what we should be focusing on.