I noted some open issues on "Classes with Trait Composition"

Rick Waldron waldron.rick at gmail.com
Wed May 18 17:07:52 PDT 2011


Just sort of curious... Given the following:

// old and busted
function SomeClass() {}; SomeClass.prototype.someMethod = function(arg) {
... }

// new hotness
class SomeClass { someMethod(arg) { ... } }

In the second form, how would I denote a method that is defined as an own
property? Additionally, how would something like the following be handled?

function Ctor() {
    this.method = function() {
        return "own property";
    };
    return this;
}

Ctor.prototype.method = function() {
    return "instance property";
};

var c = new Ctor();

console.log(
    c.method() // "own property"
);

Thanks in advance :)

Rick



On Wed, May 18, 2011 at 3:10 PM, Bob Nystrom <rnystrom at google.com> wrote:

> On Wed, May 18, 2011 at 11:48 AM, Brendan Eich <brendan at mozilla.com>wrote:
>
>> The whole of class declaration is a mouthful. 'function' and 'prototype'
>> are overlong too.
>>
>
> Agreed. One of the reasons I'm really excited about this proposal is that
> it addresses those:
>
> // old and busted
> function SomeClass() {}; SomeClass.prototype.someMethod = function(arg) {
> ... }
>
> // new hotness
> class SomeClass { someMethod(arg) { ... } }
>
>
> We can try for conciseness in this one corner but it doesn't help in
>> general. I think we need to weight the whole syntax and see where the
>> verbosity *and other* pain points are in practice.
>>
>
> Sure. I'm not stuck on "new", but in the chunks of sample code I've put
> together using "constructor" (which is what Traceur uses/did use for a good
> while) it did actually stick out as a syntactic wart, at least to me.
>
> Same with 'constructor', and that property must exist somehow. Why not be
>> explicit and avoid having two names for one prototype property?
>>
>> 3 is false in ES5. Reserved identifiers are valid property names. This is
>> implemented in all the ES5-supporting browsers.
>>
>
> Ah, my mistake. These are both fair points. It's too bad "constructor" is
> such a long word.
>
> In the interests of considering all possibilities, one option would be to
> use no name at all for the constructor:
>
> class Point {
>   (x, y) {
>     this.x = x;
>     this.y = y;
>   }
> }
>
> I find that simultaneously delightfully lightweight and terrifyingly
> obscure.
>
> - bob
>
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20110518/c417782c/attachment-0001.html>


More information about the es-discuss mailing list