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

Reply via email to