Minimalist Classes

Dmitry Soshnikov dmitry.soshnikov at gmail.com
Tue Nov 1 10:40:56 PDT 2011


On 01.11.2011 21:34, Axel Rauschmayer wrote:
> If you have a prototype chain of objects, |this| will always point to 
> the beginning of the chain (which is also where properties are created 
> whenever you set a property via |this|). This is what allows methods 
> in the prototype to access instance properties.
>
> If there is a method m in any of the objects of the chain and it makes 
> a super-call, you want the search to start in the prototype of m’s 
> object – and not in the prototype of |this| (which is always the 
> second object in the prototype chain).
>
> Does that make sense?
>

No it doesn't. Is there someone on the list who reads it carefully?

Once again. This is a well-known for years issue and has _several_ (at 
least three) solutions. One of them (which I call "delete-and-restore 
parent link" technique) I showed in the previous letter.

The mentioned technique allows normally to make super calls w/o 
hardcoding names of classes. Other techniques (such as using caller and 
wrappers) also can be used, but not so efficient.

Dmitry.

> On Nov 1, 2011, at 18:22 , John J Barton wrote:
>
>> On Tue, Nov 1, 2011 at 9:45 AM, Allen Wirfs-Brock 
>> <allen at wirfs-brock.com <mailto:allen at wirfs-brock.com>> wrote:
>>>
>>> On Nov 1, 2011, at 6:53 AM, Jeremy Ashkenas wrote:
>>
>>> The complication of super is that each "super call" requires two 
>>> independent
>>> pieces of state in additional to the method arguments: the object 
>>> that will
>>> be used as the |this| value of the resulting method invocation and the
>>> object where property lookup will begin when searching for the  method.
>>> Let's call this the "lookup-point".   |super| when used to access a 
>>> method
>>> property really represents a pair of values (this,lookup-point).  In the
>>> general case, these are not the same value so they must be independently
>>> captured and represented.
>>> Where do these two pieces of state come from?  The |this| value of a 
>>> super
>>> call is simply the |this| that was dynamically passed into the calling
>>> method.  Where does the look-up point come from.  There are 
>>> fundamentally
>>> two possibilities:
>>> a) it is dynamically passed to every method invocation, ;just like 
>>> |this|
>>> currently is
>>> b) it is statically associated with the method in some way.
>>
>> I'm just curious and I think understanding the following point would
>> help developers:
>>
>> Why isn't the |super| lookup-point |this.getPrototypeOf()| (The
>> protolink or [[Prototype]])?  I thought that if
>>   let f = new F();
>> and F inherits from G, then f.foo() will have this.getPrototypeOf()
>> === G and that is what super would be? Somewhere I went wrong...
>>
>> jjb
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org <mailto:es-discuss at mozilla.org>
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>
> -- 
> Dr. Axel Rauschmayer
> axel at rauschma.de <mailto:axel at rauschma.de>
>
> home: rauschma.de <http://rauschma.de>
> twitter: twitter.com/rauschma <http://twitter.com/rauschma>
> blog: 2ality.com <http://2ality.com>
>
>
>
>
> _______________________________________________
> 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/20111101/6ac22bf2/attachment-0001.html>


More information about the es-discuss mailing list