New private names proposal

Brendan Eich brendan at mozilla.com
Wed Dec 22 11:10:19 PST 2010


On Dec 22, 2010, at 8:50 AM, Kevin Smith wrote:

> From my perspective as a JS programmer, overloading the dot seems confusing.  The gains in elegance don't appear to me to be worth it.  However, overloading [] might be more acceptable:

[] gets no respect, I tell ya! ;-)


> let x = new PrivateName();
> // or perhaps:
> private x;
> 
> function Point()
> {
>     this[x] = 100;
> }
> 
> function createPoint()
> {
>     return {
>         [x]: 100,
>     };

This is an interesting idea, one I've heard about from Pythonistas who want property names to be evaluated expressions, not implciitly quoted literals if identifier-names, in object initialiser. It would save some amount of eval and Function use.

It conflicts with the original MetaProperties syntax at http://wiki.ecmascript.org/doku.php?id=strawman:object_initialiser_extensions (grammar) and http://wiki.ecmascript.org/doku.php?id=strawman:obj_initialiser_meta (examples), which went like so:

var fancyObj = {
    [proto: fancyProto, sealed]
    prop1: value1,
    . . .
};

but now uses <> instead of []. So no longer a strawman conflict, but I fear the angle brackets are going to cause us some grammatical and nesting-in-HTML pain.

/be



More information about the es-discuss mailing list