prototype focus

Brendan Eich brendan at mozilla.com
Fri Jul 1 10:31:27 PDT 2011


On Jul 1, 2011, at 6:19 AM, Irakli Gozalishvili wrote:

> With focus on prototype this is so much simpler: 
> 
> var Foo = Object.extend({
>    initialize: function(options) { ... },
>    do_foo_job: function() { ... }
> })

With <| and 'super' in functions, I think you are set. It's hard to add more. The main debate is about whether this is enough, or do classes as sugar provide enough added value?

(But you didn't show Bar as well as Foo.)

/be


> 
> On Friday, 2011-07-01 at 11:10 , Axel Rauschmayer wrote:
> 
>>> I don't think
>>> JavaScript has ever been far from its prototype roots especially if
>>> the programmer shifts to thinking about a prototype object instead of
>>> thinking about a functions prototype property.
>> 
>> That is basically the point that the proposal tries to make. Have you taken a look at the library code? It is very short and not a radical overhaul.
>> http://dl.2ality.com/dl/2011/06/Proto.js
>> 
>> Note how below, there is always an extra "prototype" in there with constructor functions.
>> 
>> Super-calls (there will be syntactic sugar for this):
>> - Constructor functions: Superclass.prototype.foo.call(this)
>> - PAC: Superclass.foo.call(this)
>> 
>> Subclassing:
>> - Constructor functions: Subclass.prototype = Object.create(Superclass.prototype)
>> - PAC: let Subclass = Object.create(Superclass)
>> 
>> Instanceof (internally):
>> - Constructor functions: o instanceof C === C.prototype.isPrototypeOf(o)
>> - PAC: o instanceof C === C.isPrototypeOf(o)
>> 
>> 
>>>> Problems that both prototypes-as-classes (PAC) and class literals (CL) are
>>>> trying to solve are:
>>>> - Subclassing is hard and not directly supported by the language: connecting
>>>> prototypes, chaining constructors, super-references.
>>> 
>>> Object.getPrototypeOf(this).foo.call(this) is pretty long.
>> 
>> See above.
>> 
>>> It seems to me that perhaps the PaC drifted too far or perhaps started
>>> too far from what JavaScript has already. If the idea is to shift the
>>> focus more towards prototypes, then starting from something like what
>>> I've written and adding "super" syntax would be more consistent with
>>> what JavaScript already has.
>> 
>> 
>> “too far from what JavaScript has already” is very vague. How so? With class literals, your code will look like PAC, anyway. Have you taken a look at Sect. 3? Do you agree that the mentioned conceptual simplifications hold?
>> http://www.2ality.com/2011/06/prototypes-as-classes.html#3
>> 
>> I find Brendan’s anti-PAC argument much more convincing: that all people might find it more natural to think in terms of constructors than in terms of prototypes. If that is the case then PAC would be a bad idea. The other convincing anti-PAC argument is that it is a bad idea to have two class mechanisms.
>> 
>> -- 
>> Dr. Axel Rauschmayer
>> 
>> axel at rauschma.de
>> twitter.com/rauschma
>> 
>> home: rauschma.de
>> blog: 2ality.com
>> 
>> 
>> 
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
> 
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20110701/f6883ad7/attachment-0001.html>


More information about the es-discuss mailing list