Thanks. But it is function exemplar versus object exemplar and not constructor exemplar versus prototype exemplar. Right?
On Oct 31, 2011, at 1:29 , Allen Wirfs-Brock wrote: > > On Oct 30, 2011, at 1:12 PM, Axel Rauschmayer wrote: > >>> The object exemplar approach is just like self or selfish, except that it >>> builds upon features that are already in JS. Specifically, it uses the new >>> operator instead of a new method and it names the initialization method >>> "constructor" in order to tie into the object construction mechanisms that >>> already exist in JS. >> >> >> I’m trying to summarize, let me know if I made any mistakes: >> >> With the new new approach, we will have four kinds of exemplars (which are, >> roughly, “object factories”): >> 1. Object literals > > I'm not sure I would classify a simple, unnamed object literal as an > "exemplar". When I introduce this term I had in mind a construct for > expressing a named abstraction over a set of similar objects. The name part > is important because it is the name that allows talk about the set rather > than the individual object in the set. Object literals might be used as > constituent elements in the definition but are not by them selves exemplars. > >> 2. Function exemplars (constructor exemplars?) >> 3. Object exemplars (prototype exemplars?) >> 4. Object.create() > > I would consider (demote) Object.create to simply be part of the languages > reflection API rather than an actual language element. As such, we may not > need to include it in this consideration. >> >> The proto operator lets us use inheritance between any two #2 or #3 >> exemplars. That ensures compatibility with legacy code. Since instanceof >> works for both kinds of examplars as well, the only possible hazard that is >> left is function exemplar code trying to access ObjectExamplar.prototype, >> e.g. to add new methods. >> >> Object exemplar example: >> >> const Person = { >> constructor(name) { >> this.name = name; >> }, >> describe() { >> return "Person called "+this.name; >> } >> }; >> const Employee = Person <| { >> constructor(name, title) { >> super.constructor(name); >> this.title = title; >> }, >> describe() { >> return super.describe()+" ("+this.title+")"; >> } >> }; >> >> let jane = new Employee(); >> console.log(jane instanceof Employee); // true >> >> If object exemplars were to become part of ES.next, we would not need class >> literals. >> >> -- >> Dr. Axel Rauschmayer >> a...@rauschma.de >> >> home: rauschma.de >> twitter: twitter.com/rauschma >> blog: 2ality.com >> >> >> >> > > -- Dr. Axel Rauschmayer a...@rauschma.de home: rauschma.de twitter: twitter.com/rauschma blog: 2ality.com
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss