On 2008-08-01, at 05:13EDT, Peter Hall wrote: >>> >>> In AS3, the reference to bar in the zot function would be bound to >>> this.bar >> >> I don't follow. There is no `this.bar` in the class where zot is >> defined. >> > > Sorry, I said that backwards. When class foo is compiled, there is no > member called bar, so the reference is bound to the global variable. > Defining a member variable called bar in the subclass does not affect > that.
I think what everyone is saying is that my model of how references in methods are resolved is wrong. There is no implicit `with (this)` in method bodies, the references are resolved lexically, not dynamically. In either case, though, it seems there is no in-language way to refer to a global that is shadowed by an instance variable. The offered solutions assume that the implementation creates a global object that can be used to refer to globals. > I don't know how convention will develop in other environments but, in > AS3, global variables are almost always declared in packages, and > strict mode is on by default. The result is that you would always get > a compiler error in these cases instead of an ambiguous reference. What is the error? I don't get an error with this code: var free = 'outer'; class Top { function test () { return free; } } class Sub extends Top { var free = 'inner'; override function test () { return free; } } Perhaps this is just poor practice, but it is confusing that the two uses of `free` result in two different bindings. _______________________________________________ Es4-discuss mailing list Es4-discuss@mozilla.org https://mail.mozilla.org/listinfo/es4-discuss