On Jul 7, 2011, at 11:07 PM, Gavin Barraclough wrote: > Ah, I see. It's a fair point, but isn't this already a hazard that the > language faces?
Not with private names. > Suppose I have two objects, extensible instance X with private instance > property 'foo', and extensible object Y upon which I have defined a property > 'foo' using Object.defineProperty, setting writable=false. If a client of Y > tries to extend if with a public 'foo' property, then this would fail > (throwing a TypeError in strict mode code). Would it not be acceptable for > the attempted assignment to the private property of X to fail in a similar > fashion? No, that leaks the fact that there's a private-named object (if you also enumerate public names and do not find such a name; or enumerate property descriptors, etc.). > It seems that it is already the case that if a client wishes to associate > data with a given object under any arbitrary name, then the only truly safe > way to do so is through an external mapping such as a weak map / ephemeron > table? No, private names are in ES.next: http://wiki.ecmascript.org/doku.php?id=harmony:private_name_objects > Might it be reasonable to make private properties be regular properties on > the object, with a new 'private' attribute, similar to the existing > writable/configurable attributes? From the perspective of code outside of > the associated class, an instance's private property would be non-readable, > non-writable and non-configurable (likely also non-enumerable?), with any > attempt to get, set, or delete the property failing in a similar manner to an > existing writable/configurable attribute violation. It would be great to > hear your thoughts on this. See above -- private means you can't probe, let alone collide, for the private name from outside of the abstraction. Private name objects prove much more than a single-bit 'private' attribute -- they allow private, protected, friend, shared-secret, and public-but-guarnateed-unique names. /be _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

