On 19 March 2012 21:13, Allen Wirfs-Brock <al...@wirfs-brock.com> 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.
>

How about reusing 'new'?

let obj  = do {
   let a;
   new {
      get a() {return a},
      set a()v) {a=v}
   }
}

That is, in 11.2.2, semantics of "new NewExpression", simply replace step 4
with

4. If constructor does not implement the [[Construct]] internal method,
return constructor.

(Instead of throwing a TypeError. Probably want to rename 'constructor'
there.)

AFAICS, a plain object literal never has [[Construct]], so this should
always work. Strictly speaking that is a breaking change, but it seems
relatively unlikely that there is much code relying on the current error
behaviour. But maybe I'm being naive. :)

/Andreas
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to