Why would you use a square bracket notation rather than a . Property access notation?
[] is typically only use when the property name is in a variable, which is not the case when you write your own object. Benoit On Jan 23, 2013, at 8:59, "Mark S. Miller" <[email protected]> wrote: > Hi Kevin, thanks for pulling this code example out of the gist and posting > separately. Looking at it only in context before, for some reason I hadn't > realized how beautiful this is. To support this pattern, your makePrivate() > could be defined either in terms of either private symbols or weakmaps, right? > > Given how concise and beautiful this is, even if this is defined in terms of > private symbols, I agree this looks much better than the square bracket > syntax for accessing private fields. It also looks good enough that the > hypothetical ES7 syntactic support doesn't look much better -- perhaps not > better enough to be worth adding more sugar. As you say, this will give us > enough experience with a usable privacy syntax that we can make a more > informed choice for ES7 when it comes to that. Thanks! > > > > On Wed, Jan 23, 2013 at 7:30 AM, Kevin Smith <[email protected]> wrote: >> >>> - Hosting getPrivate/setPrivate on Object seems quite strange to me. >> >> Reserve judgement for a bit on this... >> >>> - it seems unrealistic to me to ask developers to write so much code every >>> time they want to use their own private instance variable. The notion of >>> Private should be specified once for an instance variable, not every time >>> it's used internally >> >> Sure - eventually. But this proposal tries to take a smaller step in that >> direction, without committing too much either way. Also, see the "simple >> wrapping API" example in the gist. The amount of code is quite small if >> such a wrapping is used: >> >> let priv = makePrivate(); >> >> class Purse { >> >> constructor() { >> priv(this, { balance: 0 }); >> } >> >> getBalance() { return priv(this).balance; } >> >> makePurse() { return new Purse; } >> >> deposit(amount, srcPurse) { >> priv(srcPurse).balance -= amount; >> priv(this).balance += amount; >> } >> } >> >> Yes, you have to use the "priv" function. But on the other hand you don't >> need to create (say) 10 private symbols for 10 properties and use ugly >> square brackets. >> >> And of course syntax will make all of this more concise in ES7. And when it >> comes time to design ES7, the committee will have more real world usage to >> inform the syntax. >> >>> - I haven't followed the whole thread and I'm not a language developer. I >>> never felt that I needed a private data structure to hold internal >>> "stuff". One can already do that with a closure and a WeakMap manually if >>> one really wants it >> >> Again, I think it might be more convenient to store properties in one >> private object, rather than maintain several private symbols. But that >> said, this proposal will allow you to use as many separate symbols as you >> like. >> >>> - I do want private instance variables that allow me to truly have >>> encapsulation. >> >> Well here ya go! : ) >> >> Think of this proposal as a max-min version of privacy. It leaves WeakMap >> as a pure data structure with specific GC semantics (like Allen wants), >> while also providing the ability to do efficient rights-amplification (like >> Mark wants). It simplifies the concept of Symbol (there is only one >> "kind"). And it leaves a large degree of freedom for future improvements. >> >> { Kevin } >> >> _______________________________________________ >> es-discuss mailing list >> [email protected] >> https://mail.mozilla.org/listinfo/es-discuss > > > > -- > Cheers, > --MarkM
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

