> Except I'm not sure the @private could be made to work without creating > confusing semantics around it, so object literals would still be one step > behind. > > As far as I understand "@private_stuff" would desugar into a name object only > available in scope of the object literal.
The basic idea of private names is that you don't use names directly, but store them in a variable and use that variable whenever you need to refer to something: var _name = "MyClass_private_a3cfb"; function MyClass(name) { this[_name] = name; } The actual private names are very similar to _name above, but they are not strings, they are special objects that are never listed anywhere (one step beyond non-enumerable, if you will). Thus, the challenge is clear: You have to introduce variables such as _name in a manner that makes them accessible wherever you need them. > var o = { > @private_stuff: bar; > method1() { } > } > > var o = (function () { > var private_stuff = name.create(); > var ret = { > method1() { } > } > ret[private_stuff] = bar; > })(); > > I personally don't find that confusing. The latest ideas are about requiring a private section where you declare private_stuff. var obj = { private { private_stuff } @private_stuff: bar, method1() { return this.@private_stuff; } } It does desugar like you mention above. If you use constructor functions without any tricks, then scope is an issue: var private_stuff = name.create(); // it would be nice to have support for a private section here function MyClass(stuff) { this.@private_stuff = stuff; // same as this[private_stuff] } MyClass.prototype.method1 = function () { return this.@private_stuff; // same as this[private_stuff] } -- Dr. Axel Rauschmayer a...@rauschma.de twitter.com/rauschma Home: rauschma.de Blog: 2ality.com
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss