> Using "new" for the constructor is one of my favorite feature's of Allen's 
> proposal. Things I like about it:
> 
> 1. It's terse. Since almost every class defines a ctor, this is helpful. 
> "constructor" is a mouthful and repeating the full class name (like in Java, 
> C++, etc.) is redundant.
> 2. I think it's pretty clear to a user what's going on.
> 3. It avoids stealing a valid identifier. You can't define a method named 
> "new" but "constructor" is a valid property name.

Yes you can:

    var obj = {
        new: function() { print("hey what's up") }
    }

To my mind, this slightly weakens the case for |new| over |constructor|. You'd 
be special-casing the syntax *not* to create a property called "new" even 
though in object literals it does.

But I'm somewhat divided about this particular issue. You're right that the 
longer name hurts both for writing and reading. In both cases, the name is 
being special-cased (in either case, there's something special going on: the 
function defines the call and construct behavior of the class's constructor 
function, and both the instance *and* the prototype are given a property called 
|constructor|). But arguably there's something slightly less surprising about 
giving the special-case semantics to a reserved word, and of course only in the 
context of a class body. And yet, as I said above, there is something slightly 
weird about *not* creating a property called "new" when using the keyword 
|new|. (I think it would be a bad idea to have it create *both* a property 
called |constructor| *and* a property called |new|.)

Dave

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to