Isn’t it that any FunctionDefinition that isn’t local and isn’t being used
in a call needs to be turned into a closure and cached so that same
closure gets re-used the next time?

You could be building an array of callbacks:

        Var foo:Array = new Array(10);
        foo[1] = someFunction;
        foo[2] = someOtherObject.someOtherObjectsFunction;
        foo[3] = functionThatReturnsAFunction();
        
-Alex

On 7/16/15, 1:48 PM, "Michael Schmalle" <teotigraphix...@gmail.com> wrote:

>Yeah, it can be. The more I look at this the more I remember doing it all
>for variables, function/method arguments for Randori as well. I mean some
>type of function binding.
>
>I am still rusty when looking at this and just doing a high level browse
>right at the moment.
>
>So is there any other place I am missing in my thought that needs to be
>bound, variable and arguments correct?
>
>Mike
>
>On Thu, Jul 16, 2015 at 4:25 PM, Josh Tynjala <joshtynj...@gmail.com>
>wrote:
>
>> 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 <
>> teotigraphix...@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 <joshtynj...@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 <fr...@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#SimulatingAS3languagefeaturesinJ
>>avaScriptusingAMDandES5-Boundmethods
>> > > > Maybe it helps / clarifies things!
>> > > >
>> > > > Cheers
>> > > > -Frank-
>> > > >
>> > > > On Wed, Jul 15, 2015 at 1:18 PM, Michael Schmalle <
>> > > > teotigraphix...@gmail.com
>> > > > > wrote:
>> > > >
>> > > > > On Tue, Jul 14, 2015 at 7:11 PM, Alex Harui <aha...@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" <joshtynj...@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
>><aha...@adobe.com>
>> > > > wrote:
>> > > > > > >
>> > > > > > >>
>> > > > > > >>
>> > > > > > >> On 6/28/15, 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.
>> > > > > > >>
>> > > > > > >> 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
>> > > > > > >>
>> > > > > > >>
>> > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>>

Reply via email to