On Monday, 2011-11-14 at 16:50 , David Flanagan wrote:

> On 11/14/11 4:16 PM, Allen Wirfs-Brock wrote:
> > On Nov 14, 2011, at 3:15 PM, David Flanagan wrote:
> > > I have a bad feeling about making 'new' work with both functions and 
> > > object exemplars. If we can have two different types of classes, we're 
> > > going to end up using typeof on our class objects to figure out what kind 
> > > of class they are. If I've got a value C from a library and I think it is 
> > > an object exemplar, but it is in fact a constructor function, then 'class 
> > > C' is going to return Function rather than C itself...
> > 
> > Well, new'ing object exemplars has always been the central concept of our 
> > discussions about them. Essentially it is the self style of object creation 
> > and arguably the way the prototypal instantiation is supposed to work. It 
> > seems to be what people who really like prototypal inheritance really want 
> > to do.
> > 
> 
> Apparently I wasn't paying attention to the early discussions about 
> object exemplars. I've heard the term used, but missed the point about 
> changing the behavior of new. It seems to me people who want to use 
> self-style object creation can use Object.create() and people who want 
> to use JavaScript-style object creation can use new like we've been 
> doing for 15 years. (Just today I wrote a blog post explaining why I'm 
> hoping for classes in ES.next, and included, as part of my argument, the 
> assertion that all the proposals on the table are just syntax sugar 
> without new language semantics. I was wrong about that, I guess!)
> 
> > The "magic" of what I'm proposing is that you will rarely have to worry 
> > about whether a named object abstraction (call it Foo) you get from a 
> > library is an object exemplar or a function/class exemplar. Without knowing 
> > you can say:
> > new Foo(args)
> > 
> 
> Maybe I'm overreacting, and new semantics can make this all just work. 
> But it seems like a major, major change to the language.
> 
> > and it will work. Without knowing you can do either :
> > let subfoo = Foo<| {constructor() {}};
> > or
> > let subfoo = class Foo<| {constructor() {}} //note this parses as: class 
> > (Foo<| {... })
> > and things will work. You can even say:
> > let subfoo = Foo<| function() {}
> > and the right thinks happen.
> > 
> > To me, this seems like the essence of object-oreinted implementation 
> > encapsulation. All a client of Foo needs to know is that Foo is an 
> > "exemplar" and hence it can be instantiated (via new) or specialized 
> > (via<|). It is up to the implementor of Foo to decide how to best express 
> > its implementation. They can even change their mind and clients shouldn't 
> > care.
> Do JavaScript programmers want exemplars or do they want classes?
> 

Some including me, want exemplars while others want classes. Good thing is that 
with this proposal both of us will get what we want :)
 
> 
> > Finally, if you really need to know whether an exemplar is an object 
> > exemplar or a function exemplar then typeof Foo is Function seems like a 
> > fine way to test it. (I'm really growing to like the is operator...)
> > 
> > > Object exemplars does not pave the cowpaths for classes: it creates a new 
> > > path and just smears out the concept of a class into something more 
> > > broad. I fear it will create confusion rather than " provide a terse and 
> > > declarative surface for those semantics so that programmer intent is 
> > > expressed instead of the underlying imperative machinery."
> > I look at it from the perspective that we already have at least two 
> > cowpaths that meander across each other in ways that make it hard to stay 
> > on either one. I'm optimistic that we pave them in such a way that we are 
> > really dealing so parallel lanes on the freeway (and this analogy just got 
> > totally out of hand).
> > 
> 
> If I may continue the out-of-hand metaphor, I worry that we'll end up 
> with a two lane freeway that is being repaved and has "Warning: abrupt 
> edge!" signs because one lane is bumpy and 2 inches lower than the other 
> lane.
> 
> David
> > Allen
> 
> 
> _______________________________________________
> 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