On 17.11.2011 11:41, David Herman wrote:
On Nov 16, 2011, at 11:27 PM, Mark S. Miller wrote:

On Wed, Nov 16, 2011 at 11:24 PM, David Herman <[email protected] <mailto:[email protected]>> wrote:

       obj with { foo: 12 } with { bar: 13 } with { baz: 17 }


I don't get it yet. What do you mean by "dynamically extending prototype chains"? What does the above expression do and evaluate to?

My first answer was glib, sorry. I'm proposing `with' as a replacement syntax for <|. So the above expression evaluates to the same as

    obj <| { foo: 12 } <| { bar: 13 } <| { baz: 17 }

which in turn, if I've got this right, would be equivalent to

    Object.create(Object.create(Object.create(obj, { foo: { value: 12,
enumerable: true, configurable: true, writable: true } }),
                                { bar: { value: 13,
                                         enumerable: true,
                                         configurable: true,
                                         writable: true } }),
                  { baz: { value: 17,
                           enumerable: true,
                           configurable: true,
                           writable: true } })

since in this example I only used the object literal variant. (The function, array, etc variants do things that Object.create can't do.)


Once again, it's absolutely the same approach which I showed yesterday with using `extends' (https://mail.mozilla.org/pipermail/es-discuss/2011-November/018478.html).

In order to avoid confusion with `with', which had old and used for years semantics, I still propose to use `extends' instead.

Is it just great that we have the _same inheritance model_ as for simple objects as well as for classes?

// object inherits
var foo extends bar {
  x: 100
}

// class inherits
class Foo extends Bar {
  constructor (x, y, z) { ... }
}

P.S.: Scala e.g. uses a similar approach. But they use `object' keyword when inheriting from objects:

object foo extends bar {
  ...
}

Though, they also may use `with' in this context:

object foo extends bar with baz {
  ...
}

thus baz is a mixin. The same with classes:

class Foo extends Bar with baz {
  ....
}

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

Reply via email to