Yes, |this| is shadowed as it is in functions. You could always do |var self = 
this| if you want:

    module M {
        var self = M;
        module N {
            ... self ...
        }
    }

but modules are already named, so you can just use the name instead:

    module M {
        module N {
            ... M ...
        }
    }

Dave

On Apr 6, 2011, at 8:33 AM, Axel Rauschmayer wrote:

> Maybe I was over-thinking this problem: I was wondering how to access 
> module-global data if "this" is shaded. It seemed similar to the "var self = 
> this" work-around when using non-methods inside methods (forEach() etc.).
> 
> module Foo {
>    var bar = "abc"; // like a global inside this module, right?
>    export var Baz = {
>        amethod: {
>            // how to access bar here? As a global? "this" won't work.
>        }
>    } 
> }
> 
> This would become more complicated with nested modules.
> 
> On Apr 6, 2011, at 17:20 , David Herman wrote:
> 
>>> - Does it ever make sense to access globals via "this"? If so, I assume 
>>> there will be a use case in the upcoming modules rationale document.
>> 
>> Reflecting the globals via |this| preserves some web compatibility with 
>> programs that dynamically test the global object. It allows you some 
>> lightweight reflection of the global scope, while removing some of the more 
>> problematic reflection of legacy JS (such as deleting globals). For example, 
>> you can dynamically detect whether a variable is bound.
>> 
>>> - Should there be a keyword for "the current module" (a module-this, if you 
>>> will)? Accessing module-global data via "this" feels strange (I that is 
>>> indeed the intention of what I have read). It would also not work inside 
>>> methods.
>> 
>> I don't know why it feels strange to you; it feels pretty natural to me. 
>> Banning |this| in certain contexts has never been done in JS and I don't 
>> want to start doing it. If we don't ban it, it has to have some binding. 
>> Binding it to null or undefined would also be draconian.
>> 
>> When modules are reflected as first-class values, they are represented as 
>> objects. The body of a module acts as the object's constructor. Binding the 
>> module object as |this| fits naturally with the design.
>> 
>>> But it seems like the only globals inside a module are module-relative. 
>>> Then everything would work out fine.
>> 
>> I don't understand this comment.
>> 
>> Dave
>> 
>> 
> 
> -- 
> Dr. Axel Rauschmayer
> 
> [email protected]
> twitter.com/rauschma
> 
> home: rauschma.de
> blog: 2ality.com
> 
> 
> 

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

Reply via email to