Is class syntax really necessary ?

Angus Croll anguscroll at gmail.com
Mon May 23 09:45:19 PDT 2011


Sugar is fine for defining classes (as opposed to defining types in terms of
the constructor) but I get a little worried when I see the 'extends'
keyword. I'm probably biased but I see many JavaScript trainees eager to
simulate classical inheritance because it fits right in their comfort zone.
It's been said a million times before but one of the
most appealing characteristics of the JavaScript language is the
availability of so many alternatives to rigid inheritance patterns (e.g.
mixins, delegation, composition) which can liberate the developer from the
confines of the traditional 'class' hierarchy and promote more flexible and
readable code.

If Dmitry is right in saying once class + extends is available "everyone
will just start to use it" I'm concerned that this may be to the detriment
of the language.

thanks
Angus

On Mon, May 23, 2011 at 9:14 AM, Isaac Schlueter <i at izs.me> wrote:

> On Mon, May 23, 2011 at 08:51, Brendan Eich <brendan at mozilla.com> wrote:
> > Class syntax is like a lint brush for such features. If we add it, it
> will accrete more semantics (with unambiguous syntax, I hope) over time.
> This is just inevitable, in my view. It makes me want to resist classes and
> look at smaller and more direct fixes for the two known prototypal hazards.
>
> Yes, please!
>
> I assume "two known hazards" is referring to your previous email:
> "subclassed prototype/constructor set-up and super calls."
>
> I've been using this pattern in my OOP javascript programs lately:
> https://github.com/isaacs/inherits/blob/master/inherits.js
>
> It works really well, behaves as expected (easy for the author to say,
> ha, but it doesn't violate instanceof, doesn't call ctors more than
> once, doesn't clobber already-added prototype properties, etc.)  And
> it's about 10 lines, easy to read and grok.
>
> What would make it even nicer, however, with minimal added syntax:
>
> 1. Call "super(a, b, c)" instead of "Child.super.call(this, a, b, c)"
> 2. Maybe Parent.extend(Child) or Child.inherit(Parent) instead of
> inherits(Child, Parent)
> 3. Right now, calling parent versions of overridden methods is a
> painful: "this.constructor.super.prototype.someMethod.call(this)".
> It'd be nice to use something like "super.someMethod()".
> _______________________________________________
> 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/20110523/381345e9/attachment.html>


More information about the es-discuss mailing list