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 >> > > > > > >> >> > > > > > >> >> > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >>