On Mon, Mar 19, 2012 at 5:42 PM, Peter van der Zee <[email protected]> wrote:

> As long as we're bikeshedding; none of your examples look as clean to
> me as the original. If you're dead set on fixing this, try changing
> the this keyword...
>
> var a;
> var obj = {
>  get a() {return a},
>  set a(v) {a=v}
> };
>
> var obj = {
>  a: null,
>  get a() {return this.a},
>  set a(v) {this.a=v}
> };
>

I just had a "with" flashback. ;)



>
> This looks much cleaner to me than any of the other examples.
>
> (Getters and setters are non-transferable, so they'll always have a
> context, right?)
>
> - peter
>
> On Mon, Mar 19, 2012 at 9:13 PM, Allen Wirfs-Brock
> <[email protected]> wrote:
> > (Yet Another Wacky Syntax Idea)
> >
> > Here is a relatively common coding pattern:
> >
> > var a;
> > var obj = {
> >   get a() {return a},
> >   set a(v) {a=v}
> > };
> >
> > Often the intent is that the variable a should only be used within the
> object literal.  The block scoping with let and do operator will allow the
> variable and object literal to be group in this manner:
> >
> > let obj  = do {
> >    let a;
> >    ({get a() {return a},
> >      set a()v) {a=v}
> >    })
> > }
> >
> > Unfortunately, the object literal has to be enclosed in parentheses
> because an expression statement cannot begin with an object literal.  The
> same would be the case if a function expression was involved rather than an
> object literal.
> >
> > Parens are annoying because you have to remember to close them and match
> them if any additional nesting is involved.
> >
> > With completion reform, do expressions, and broader use of  blocks that
> produce values we should expect to see more situations where an
> ExpressionStatement needs to start with an object literal or function
> expression. It would be nice to have some way to do this that does not
> require parentheses.
> >
> > Prefix the expression with an unary operator is sufficient to
> disambiguate such expression but unfortunately all of the existing unary
> operators perform conversions that would invalidate the value.  However, a
> new unary operator whose semantics was to simply return its operand value
> would do the job nicely.   Both . and = seem like good candidates for such
> an operator but any operator symbol that is not currently used in a unary
> form would be a possibility:
> >
> > let obj  = do {
> >    let a;
> >    ={get a() {return a},
> >       set a(v) {a=v}
> >    }
> > }
> >
> > let obj  = do {
> >    let a;
> >    .{get a() {return a},
> >       set a(v) {a=v}
> >    }
> > }
> >
> > let obj  = do {
> >    let a;
> >    ^{get a() {return a},  //probably my favorite, but that may just be a
> leakage from my Smalltalk background...
> >        set a(v) {a=v}
> >    }
> > }
> >
> > let obj  = do {
> >    let a;
> >    |{get a() {return a},
> >       set a(v) {a=v}
> >    }
> > }
> >
> > let obj  = do {
> >    let a;
> >    /{get a() {return a},
> >       set a(v) {a=v}
> >    }
> > }
> >
> > let obj  = do {
> >    let a;
> >    *{get a() {return a},
> >       set a(v) {a=v}
> >    }
> > }
> >
> > What about ASI?  Adding a unary form of an existing binary operator
> doesn't introduce any new issues or break/change existing code:
> >
> > x
> >    ={ };
> >
> > parses as an assignment to x even if = is given a new meaning as a unary
> operator.
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > _______________________________________________
> > es-discuss mailing list
> > [email protected]
> > https://mail.mozilla.org/listinfo/es-discuss
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to