So this only happens in javascript when you pass an object function to a variable? SO what I am saying is that not using this.func() is what looses the connection to the instance scope and then this becaomes window, correct?
Mike On Sun, Jun 28, 2015 at 4:48 PM, Josh Tynjala <joshtynj...@gmail.com> wrote: > In Flash Player, when you save a reference to a member function, you can > call the function reference, and "this" will still be bound to the instance > where it came from. > > public class Test > { > public function Test() > { > this.func(); > var func:Function = this.func; > func(); > } > > private function func():void > { > trace(this); //in Flash, "this" will always be an instance of Test > } > } > > Basically, in the code above, the two calls to func() will behave the same > in Flash Player. However, in the current implementation of the transpiler, > that behavior is lost. When the reference to func() is called, "this" ends > up referring to the global window object instead. > > JavaScript function objects have a bind() function that let's you set what > "this" will refer to when the function is called: > > > https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind > > After modifying my code to use bind(), the two calls to func() will have > the same output: > > public function Test() > { > this["func"] = this.func.bind(this); > this.func(); > var func:Function = this.func; > func(); > } > > Would it be possible for the transpiler to automatically bind all member > functions to the correct scope to preserve the behavior that AS3 developers > expect? > > - Josh >