On Jul 18, 2011, at 5:31 PM, Bob Nystrom wrote: > class Point { > constructor(x, y) { > this.x = x; > this.y = y; > } > > zero() { > return new Point(0, 0); > } > > unit() { > return new Point(1, 1); > } > > prototype { > manhattanDistance() { > return Math.abs(this.x) + Math.abs(this.y); > } > } > } > > Pros: > 1. Makes it abundantly clear that prototype members are just that.
But that's not a good in itself, and your argument about many other languages putting "instance methods" at the level that this approach uses for class methods goes against. > 2. Makes it clearer (I think?) that members on the constructor ("class") are > that. Basically, the name of the surrounding curly ("prototype" or "class") > tells you where the member goes. This is a fair point but I think it is outweighed by the Cons (mine plus yours). > Cons: > 1. Prototype members, the most common case, are the most verbose and suffer > two levels of indentation. That's a problem too (in addition to the strangeness compared to other languages with 'class' syntax). > 2. constructor() is in weird limbo. Should it be under prototype or class? It binds a prototype property (MyDate.prototype.constructor), absent more magic to make that alias. It does not bind a class property (e.g., MyDate.constructor). > 3. Lots'o'curlies. This is a pain, but so are lots o' statics -- but generally class methods are few, so it could be a wash. > There may be a good solution hiding in here somewhere, but I'm not sure.
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss