Le 22/01/2013 07:31, Benoit Marchant a écrit :
Why can we express in a property descriptor the notion of writable,
configurable or enumerable but not private?
Because strings are forgeable, meaning that someone you may not trust
can read in your code or guess (maybe with low probability) the name of
the property making it not-so-private-after-all.
Also, could be off topic, but the fact that for a getter/setter foo
property, you have to implement yourself a non-enumerable _foo
property to actually have some storage, is not particularly convenient.
That's a terrible idea missing the point of accessors which are expected
to encapsulate the state they're dealing with, not force you to put it
at everyone's sight. You don't *have* to do that ...
A solution to that would be welcome! If a local variable following the
name of the property was added to the scope of the getter/setter while
it's called on an object could be one way, it would certainly
encourage following encapsulation rather than accessing a private
property directly, which would still be possible.
... and you're providing the solution yourself, getters and setters can
share a variable in a common scope. The language can't decide to add its
own variable, because it could collide with or shadow an existing
variable making the code much harder to understand and reason about. So
you have to create the variable yourself.
Interestingly, if instead of a non-enumerable _foo property a private
symbol was used, getters and setters would be the property-wise
equivalent of proxies; the private symbol playing the role of the target
and the publicly exposed string property being the proxy.
David
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss