We seem to have a different understanding of “object state”. What do you mean 
by that term?

On Aug 4, 2014, at 17:30 , John Barton <[email protected]> wrote:

> Neither example binds 'this' assuming the current Loader implementation, so 
> no object state.  Although maybe you are saying your example ought to work, 
> then we agree ;-)
> 
> 
> On Mon, Aug 4, 2014 at 7:47 AM, Axel Rauschmayer <[email protected]> wrote:
> On Aug 4, 2014, at 16:33 , John Barton <[email protected]> wrote:
> 
>> As far as I can tell you are basically arguing that simple Loader hooks 
>> don't need object state. Of course that is true.
> 
> No, I’m arguing that Juan’s code is basically “subclassing” a loader, 
> overriding a method and calling that method. ES6 classes seem like a more 
> elegant way of doing this. You’d get as much object state in the subclass as 
> you want.
> 
>> And sure we can write code that carefully and cleverly avoids using 'this'. 
>> Why? ES6 added classes because this is often the clearest way to structure 
>> more complex systems.  
>> 
>> In my case the LoaderHooks.normalize() function needs to mark names as 
>> originating from 'script' rather than 'module' based on the name (eg 
>> 'script:' or in my case trailing ',script'.  The marking table needs to be 
>> on 'this'.
>> 
>> I extend LoaderHooks to InterceptOuputLoaderHooks which calls 
>> this.onTranscoded() to copy the transcoded results from load to listeners.  
>> But my real point is why should I have to think about 'this' binding in 2015?
>> 
>> We don't need to use an old school API now, we have ES6.
>> 
>> jjb
>> 
>> On Mon, Aug 4, 2014 at 6:29 AM, Axel Rauschmayer <[email protected]> wrote:
>> On Aug 4, 2014, at 15:16 , Juan Ignacio Dopazo <[email protected]> wrote:
>> 
>>> In practice we've found that we rarely use the "new Loader(hooks)` option 
>>> and instead this is more common:
>>> 
>>> var loader = new Loader();
>>> var loaderFetch = loader.fetch.bind(loader);
>>> 
>>> loader.fetch = function (loadRecord) {
>>>   // do something
>>>   return loaderFetch(loadRecord);
>>> };
>> 
>> 
>> 
>> Why not like this then? You’d need (a compiler for) ES6, though.
>> 
>> ```js
>> class MyLoader extends Loader {
>>     fetch(loadRecord) {
>>         // do something
>>         return super(loadRecord);
>>     }
>> }
>> let loader = new MyLoader();
>> ```
> 
> 
> -- 
> Dr. Axel Rauschmayer
> [email protected]
> rauschma.de
> 
> 
> 
> 

-- 
Dr. Axel Rauschmayer
[email protected]
rauschma.de



_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to