Here's the JIRA ticket:

https://issues.apache.org/jira/browse/FLEX-34897

- Josh

On Sun, Jun 28, 2015 at 2:21 PM, Michael Schmalle <teotigraphix...@gmail.com
> wrote:

> On Sun, Jun 28, 2015 at 5:17 PM, Josh Tynjala <joshtynj...@gmail.com>
> wrote:
>
> > Yes, that is correct.
> >
> > In case it wasn't obvious, event listeners are the typical use case where
> > you'd pass a reference to a member function somewhere else where a
> > reference needs to be saved in a variable. AS3 made this easy by
> > automatically binding member functions. JavaScript usually requires some
> > manual intervention to get event listeners to be called with the right
> > scope.
> >
>
> Yeah the compiler does this already for anonymous functions, it creates a
> self var pointing to 'this' and then uses self in the anonymous function's
> body.
>
> I wasn't aware of this problem though, can you create a JIRA ticket? I
> probably will be the one that tackles it since I am sure Alex doesn't have
> time to do something like this and test it as well.
>
> Mike
>
>
>
> >
> > - Josh
> >
> > On Sun, Jun 28, 2015 at 2:06 PM, Michael Schmalle <
> > teotigraphix...@gmail.com
> > > wrote:
> >
> > > 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
> > > >
> > >
> >
>

Reply via email to