On Thu, May 31, 2012 at 6:05 AM, Jussi Kalliokoski <
[email protected]> wrote:

> On Thu, May 31, 2012 at 12:52 PM, T.J. Crowder 
> <[email protected]>wrote:
>
>> On 31 May 2012 10:44, Andreas Rossberg <[email protected]> wrote:
>>
>>> On 30 May 2012 23:34, David Herman <[email protected]> wrote:
>>> > On May 30, 2012, at 2:27 PM, Rick Waldron wrote:
>>> >
>>> > On Wed, May 30, 2012 at 5:22 PM, David Herman <[email protected]>
>>> wrote:
>>> >>
>>> >>
>>> >>    array.{
>>> >>        pop();
>>> >>        pop();
>>> >>        pop();
>>> >>    };
>>> >>
>>> >>    path.{
>>> >>        moveTo(10, 10);
>>> >>        stroke("red");
>>> >>        fill("blue");
>>> >>        ellipse(50, 50);
>>> >>    };
>>> >>
>>> >>    this.{
>>> >>        foo = 17;
>>> >>        bar = "hello";
>>> >>        baz = true;
>>> >>    };
>>> >
>>> >
>>> > This is beautiful and looks powerful -- will it still meet the most
>>> > common/obvious use case?
>>> >
>>> > var div = document.createElement().
>>> >
>>> > div.{
>>> >   style.{
>>> >     color = "red";
>>> >     left = "100px";
>>> >   }
>>> > };
>>> >
>>> >
>>> > I didn't specify in my blog post. :) I'm open to it. I tend to find the
>>> > nested syntax a little brain-exploding, but I understand the
>>> motivation.
>>>
>>> Assuming you propose to allow things like o.{a.b = 6; c.f()} anyway,
>>> then the above would actually fall out for free if you defined your
>>> syntax as pure syntactic sugar, and do the rewriting in the natural
>>> bottom up manner.
>>>
>>> /Andreas
>>
>>
>> I'm worried this looks a lot like `with` -- with the same issues. Is the
>> idea that unqualified references would be _required_ to be properties of
>> the object in question? So
>>
>
> I actually thought that this looks like `with` as well, but I don't share
> your concerns, to me this looks like a fixed `with`.
>
>
>> o.{
>>     a.b = 6;
>>     c.f();
>> };
>>
>> ...would work, but
>>
>> o.{
>>     a.b = foo;
>>     c.f();
>> };
>>
>> ...would throw (assuming there is no `foo` property)?
>>
>
> I don't see a reason why it wouldn't throw, if I understood correctly. I
> don't see why `foo` should have anything to do with `o`. IMHO, it's best if
> only the left-hand side interacts with the object being extended, this way
> we don't get the problems of `with`, i.e. scope being (near-)impossible to
> measure and more minorly, easy leaked globals (e.g. var a = {}; with (a) {
> foo = 'bar' } ).
>


I would expect it to throw a ReferenceError: foo is not defined


Rick




>
> Cheers,
> Jussi
>
> _______________________________________________
> 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