On 11/2/11 11:16 AM, Brendan Eich wrote:
On Nov 2, 2011, at 10:52 AM, David Flanagan wrote:
Could they have initializers that were automatically included in
the constructor?
I answered that in a gist comment. Yes, I like the CoffeeScript
constructor(@x, @y){} shorthand. Dart picked up on it, but requires
this. instead of @. I'll put it in the gist.
I saw the comment, I think. What I meant here was initializer
expressions that are part of the 'private' declaration. That is, can I
write
private stack = [];
and have that initialization code automatically inserted (Java-like)
into the constructor for me? I'm trying to understand whether private
and static have the same basic syntax in this proposal.
Plain 'x' is bound to the Name object and @x is the value of the
property with that name? Is x a variable?
x is a const binding in the "@ scope" of the class body. It does not
collide with any lexically bound x (formal parameter name, e.g.).
That's important -- see the Monster constructor with its name and
health parameters and private property names.
So, o@x is *not* o[x] for such a private-declared x.
What I don't understand is whether the "@ scope" is a specification
abstraction, or whether it is visible to programmers. If I declare a
private variable x, and there isn't any other x in scope, is x bound to
a Name object that I can use?
If not, is there any way I can access the automatically-created Name
objects so that I can share my private names with "friend" classes?
Some argue @ should work for any x, so if there were some x = "y" in
scope, then o@x would be o[x] would be o.y. I think that's too
error-prone. What if I typo @heath instead of @health and there's a
non-private-declared heath in scope?
That's where a 'public' declaration comes in! 'private x' binds x to a
new Name in @ scope. And 'public y' binds y to "y" in @ scope. Then
make @ work with any identifier declared private or public. That would
allow programmers to elide the "this" but still have publicly visible
properties.
Resolution of identifiers in @ scope can happen at compile time, can't
it? That is, for the code "@x", x is just looked up in @ scope once
when the code is compiled, not dynamcally each time it is evaluated, right?
David
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss