A tempest in a teapot. We can have better APIs that look nice for this use-case. Develop some!

But let's not rush them into ES6, or invent custom syntax where API is enough.

If someone does fast and good work, there's still time for ES6, or 7 (doesn't matter as much as the quality of the work; browsers are prototyping parts of both).

/be

Dmitry Soshnikov wrote:

On Jun 11, 2013, at 8:07 PM, Andrea Giammarchi wrote:

if it's about being mature, then this is mature enough, if Object.mixin will be finalized:

```javascript
class Bar extends [M1, M2, M3].reduce(
  Object.mixin,
  Object.create(Foo.prototype)
) {
  // class definition ...
}
```

I must admit that looks weird though ...


Exactly - it might be really cool from the language abilities perspective, but from the end-users, the example is not that useful: if the language provides some abstraction (the "class" abstraction in this particular case), the users which will join to JS starting form ES6 will have complete right to not even know what that magic "prototype" mean -- the one which you expose outside actually breaking the class abstraction. The prototype chain is just the implementation detail now (and all implementation detail should be hidden in the best), not a feature.

P.S.: and I still need to choose my English words better :) for the mature I probably more meant "syntactically solid" rather than a library method.

But yeah, I promised not to do big off-topic in this for-of thread.

Dmitry

br


On Tue, Jun 11, 2013 at 5:48 PM, Dmitry Soshnikov <[email protected] <mailto:[email protected]>> wrote:


    On Tue, Jun 11, 2013 at 5:33 PM, Brendan Eich
    <[email protected] <mailto:[email protected]>> wrote:

        Brian Di Palma wrote:

            Sorry for the OT message.

            On Tue, Jun 11, 2013 at 6:22 PM, Andrea Giammarchi
            <[email protected]
            <mailto:[email protected]>>  wrote:

                We don't have interfaces ... I know, we could have
                mixins though, compatible
                with @@things too.


            The concepts of Mixins has cropped up before in
            discussions and is
            used in current JS code ( EventEmitter ).
            I was wondering if it was possible to codify it in ES6 or
            is there
            simply no bandwidth/time for that?

            class MyClass extends MySuper mixin EventEmitter, Iterable {}

        What would this syntax do that couldn't be done better by
        libraries? Remember that extends' RHS is an expression.


    Don't wanna go off-topic of course, but: the the fact that RHS is
    an expression might you think Object.mixin(...) can be used there:

    class Foo extends Object.mixin(...)

    The problem with it as I mentioned (and which was successfully
    and unfortunately ignored ;)), it accepts only two arguments
    instead of variant to mix several objects.

    But even it Object.mixin(...) could accept several arguments, we
    still can't extend a class with another class _and_ a set of mixins.

    class Bar extends Object.mixin(Foo, M1, M2...), where Foo is a
    class and Ms are mixin.

    To do this you'll need to either express classes's implementation
    details (i.e. to break classes abstraction): class Bar extends
    Object.mixin(Foo.prototype, M1...);

    Or, yeah, to provide a library method:

    class Bar extends classWithMixins(Foo, M1, M2...);

    (the later example is actually a real implementation we use in
    local projects currently).

    Another issue with a library method -- it just looks immature for
    a mature language. From this viewpoint:

    class Bar extends Foo {
      use M1, M2;
    }

    looks better and mature as all normal OOP langs with
    mixins/traits. IMHO.

    But as long as ES6 spec is already (almost) stable, I agree it
    can be taken to something ES7-ish.

    Dmitry

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



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

Reply via email to