flex-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Josh Tynjala <joshtynj...@gmail.com>
Subject Re: [FalconJX] Scope when calling member function from a reference
Date Thu, 16 Jul 2015 20:25:23 GMT
Yeah, that looks like the function in use. The comment specifically
mentions being on the right side of an equals sign. Would the same code be
used when passed as a function argument, or would that need to happen
elsewhere? Maybe in the emitArgumentIdentifier() function above that?

I don't know if there are other edge cases where a reference could get
passed around and lose scope. Possible, but I suspect that the assignment
and function argument cases are vastly more common.

- Josh

On Thu, Jul 16, 2015 at 12:33 PM, Michael Schmalle <
teotigraphixllc@gmail.com> wrote:

> HA,
>
> I just looked at the code I wrote 2+ years ago for the AMD emitter, looks
> like I already did this. :)
>
> If you look at JSAMDEmitter.java at line 845. :) That AS3.bind() call IS
> that function in javascript you just listed out.
>
> So I guess that answers that, my comment was;
>
>             // AS3.bind( this,"secret$1");
>             // this will happen on the right side of the = sign to bind a
> method/function
>             // to a variable
>
> Does this sound right?
>
> Mike
>
>
> On Thu, Jul 16, 2015 at 3:23 PM, Josh Tynjala <joshtynjala@gmail.com>
> wrote:
>
> > This little snippet from that wiki page looks like it should be helpful.
> >
> > function bind(object, boundMethodName) {
> >   if (object.hasOwnProperty(boundMethodName)) {
> >     return object[boundMethodName];
> >   }
> >   var boundMethod = object[boundMethodName].bind(object);
> >   Object.defineProperty(object, boundMethodName, {
> >     value: boundMethod
> >   });
> >   return boundMethod;
> > }
> >
> > I don't know the internals of the emitter, but if you can detect
> > specifically when a function member is accessed (and not simply called),
> > you'd be able to use this function there. I like that it would ensure
> that
> > binding a function only happens on demand. That's better than binding
> every
> > member function up front. All other functions that aren't being used as
> > event listeners or passed to a variable can be accessed from the
> prototype
> > chain normally.
> >
> > - Josh
> >
> >
> > On Thu, Jul 16, 2015 at 2:21 AM, Frank Wienberg <frank@jangaroo.net>
> > wrote:
> >
> > > Hi guys,
> > > honestly I didn't read through the whole thread, but just wanted to
> > remind
> > > you of what we collected about binding methods in the Apache Flex Wiki:
> > >
> > >
> >
> https://cwiki.apache.org/confluence/display/FLEX/Simulating+AS3+language+features+in+JavaScript+using+AMD+and+ES5#SimulatingAS3languagefeaturesinJavaScriptusingAMDandES5-Boundmethods
> > > Maybe it helps / clarifies things!
> > >
> > > Cheers
> > > -Frank-
> > >
> > > On Wed, Jul 15, 2015 at 1:18 PM, Michael Schmalle <
> > > teotigraphixllc@gmail.com
> > > > wrote:
> > >
> > > > On Tue, Jul 14, 2015 at 7:11 PM, Alex Harui <aharui@adobe.com>
> wrote:
> > > >
> > > > > Bummer.
> > > > >
> > > > > Did you try:
> > > > >
> > > > >   this.addEventListener("mousedown",
> simpleButton_mousedownHandler);
> > > > >
> > > > > The “this.” might be creating a pattern that isn’t handled.
 I’m
> sort
> > > of
> > > > > hoping Mike will finish his mother-in-law’s bathroom and find time
> to
> > > > > start in on some way to pass context so we don’t have to one-off
> > these
> > > > > patterns.
> > > > >
> > > >
> > > > I'm done as of last Friday but my wife keeps inventing more things
> for
> > me
> > > > to do around the house, like buying 4 pieces of trim for the doors
> and
> > > > baseboard.
> > > >
> > > > I am VERY short on time right now as it's summer and the kids are
> home,
> > > > blah blah. :) Plus I still need to keep working on my AIR projects
> for
> > my
> > > > fall goal.
> > > >
> > > > I guess, if you can create a new thread and clearly explain the
> problem
> > > and
> > > > solution I can then look at it with a clean slate and figure out how
> > much
> > > > time it might take me to do given the current emitter's state.
> > > >
> > > > I know I did something with the other compiler and event listeners, I
> > > would
> > > > have to look.
> > > >
> > > > Mike
> > > >
> > > >
> > > >
> > > > >
> > > > > -Alex
> > > > >
> > > > > On 7/14/15, 3:50 PM, "Josh Tynjala" <joshtynjala@gmail.com>
wrote:
> > > > >
> > > > > >Alex,
> > > > > >
> > > > > >The change you made worked for the case where the function is
> > assigned
> > > > to
> > > > > >a
> > > > > >variable, but it doesn't account for the function being passed
as
> an
> > > > > >argument to a function.
> > > > > >
> > > > > >This still doesn't work for me:
> > > > > >
> > > > > >this.addEventListener("mousedown",
> > > this.simpleButton_mousedownHandler);
> > > > > >
> > > > > >However, as a workaround, I can do this, for now:
> > > > > >
> > > > > >var mouseDownListener:Function =
> this.simpleButton_mousedownHandler;
> > > > > >this.addEventListener("mousedown", mouseDownListener);
> > > > > >
> > > > > >- Josh
> > > > > >
> > > > > >On Sun, Jun 28, 2015 at 10:13 PM, Alex Harui <aharui@adobe.com>
> > > wrote:
> > > > > >
> > > > > >>
> > > > > >>
> > > > > >> On 6/28/15, 2:21 PM, "Michael Schmalle" <
> > teotigraphixllc@gmail.com>
> > > > > >>wrote:
> > > > > >>
> > > > > >> >On Sun, Jun 28, 2015 at 5:17 PM, Josh Tynjala <
> > > joshtynjala@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.
> > > > > >>
> > > > > >> Actually, that ‘self’ stuff is for AS lexical scoping.
 Josh is
> > more
> > > > > >> interested in the use of goog.bind for function identifiers.
> > > FalconJX
> > > > > >> handles that correctly in most cases for addEventListener
and
> > other
> > > > > >> callbacks, but I guess we don’t handle this scenario.
> > > > > >>
> > > > > >> I can try to take a look at it, but if you want to, search
for
> > > > > >>GOOG_BIND.
> > > > > >>
> > > > > >> >
> > > > > >> >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.
> > > > > >>
> > > > > >> Well, I can probably get it working, but I’m sure I won’t
test
> it
> > as
> > > > > >>well
> > > > > >> as you will.
> > > > > >>
> > > > > >> -Alex
> > > > > >>
> > > > > >>
> > > > >
> > > > >
> > > >
> > >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message