Syntax Proposal: Allow Java-like Object Literals after constructor calls to set properties on created objects.

Jürg Lehni lists at scratchdisk.com
Wed Jun 30 16:31:58 PDT 2010


On 30 Jun 2010, at 19:13, Brendan Eich wrote:

> Some of us old-timers were around at Netscape with Norris Boyd when this was designed and added to Rhino. It was not added to SpiderMonkey, though, for not terribly compelling reasons.

Do you remember what the reason was why this was added to Rhino in the first place? Was it to facilitate Java-like syntax when implementing interfaces? I remember seeing examples with such code quite a while ago, triggering me playing around with the feature and finding out that the object is simply passed as a last added argument. I did not manage to find any example code that somehow makes reference to this recently though, so I am wondering if the Rhino people are maybe trying to get rid of this too on the long term? After all it is not proper ES syntax, and for example Eclipse's syntax checker is complaining about it.

> I remember being concerned about the ASI issue, which requries a [no LineTerminator here] restricted production. That is still a concern: the TC39 committee doesn't want to add restricted productions without very good reason.
> 
> This came up later, via https://bugzilla.mozilla.org/show_bug.cgi?id=253138 -- see https://bugzilla.mozilla.org/show_bug.cgi?id=253138#c7. https://bugzilla.mozilla.org/show_bug.cgi?id=253138#c10 suggests an operator of some sort to "merge" the objects.
> 
> Another point to note is that [1,2,3] is not equivalent to new Array(3) {0:1, 1:2, 2:3}, because the array initialiser form users the original value of Array.prototype, and it does not call the current binding of Array as a constructor.
> 
> So, more work needed to avoid a restricted production, at least. A linking operator or keyword ("with" a la functional record update) would help.

This is all very interesting. An operator would make the feature even more useful, as it would not be bound to the calling of a constructor. Could a simple : work? E.g.:

new Array(3) : { 0:1, 1:2, 2:3 };

Jürg


More information about the es-discuss mailing list