Some guidance can be found here [1] and here [2]. EdB
1: http://blogs.adobe.com/bparadie/2011/11/26/classes-inheritance-interfaces-packages-and-namespaces/ 2: https://cwiki.apache.org/confluence/display/FLEX/Simulating+AS3+language+features+in+JavaScript+using+AMD+and+ES5 On Wed, Oct 30, 2013 at 8:07 PM, Erik de Bruin <e...@ixsoftware.nl> wrote: > "instanceof" doesn't check if an interface is implemented, neither in > Flex nor using Closure inheritance in JavaScript. What we need for > runtime checking of interface implementation is an global "is" > function... I think I taught FalconJx to translate "ClassA is ClassB" > as "is(ClassA, ClassB)". All we need to do now is to implement a > global "is()" function and somehow teach the compiler to keep track of > which classes implement which interfaces - all the way up the chain > and sideways (interfaces can implement interfaces). > > EdB > > > > On Wed, Oct 30, 2013 at 6:34 PM, Alex Harui <aha...@adobe.com> wrote: >> Reviving this thread... >> >> Peter says he wants to test to see if an object implements an interface at >> runtime. What mechanism do we want to use? >> >> I don't think we need to make instanceof work, just have some test to call. >> >> -Alex >> >> On 7/30/13 12:46 AM, "Erik de Bruin" <e...@ixsoftware.nl> wrote: >> >>>When using interfaces for type checking, there are two 'kinds': at >>>compilation and at runtime. >>> >>>The @interface and @implements annotations are for compile time checking. >>> >>>For runtime checking comes in two flavours: 'instanceof' and 'is'. >>> >>>Our method of setting up inheritance (goog.inherits) maintains the >>>inheritance chain, so 'instanceof' works out of the box. >>> >>>The work starts with 'is'. We want to story the 'extends' and >>>'implements' metadata from AS in the JS classes and create a method to >>>test against that metadata set. I have a pretty good idea on how to >>>implement such a beast, but it will require some (ha!) tinkering with >>>the FlexJS JS framework and FalconJx. That will take some time... >>> >>>EdB >>> >>> >>> >>>On Mon, Jul 29, 2013 at 9:17 PM, OmPrakash Muppirala >>><bigosma...@gmail.com> wrote: >>>> On Mon, Jul 29, 2013 at 11:20 AM, Alex Harui <aha...@adobe.com> wrote: >>>> >>>>> I think FalconJS was going to generate something like: >>>>> >>>>> if (child != undefined && >>>>> child.$implements["org.apache.flex.core.IChrome"]) >>>>> >>>>> Not sure what it was going to do for classes, maybe chase the prototype >>>>> chain? >>>>> >>>>> The other thing that occurred to me about $implements or >>>>>child.is(IChrome) >>>>> is that all objects must then have these properties or functions where >>>>>the >>>>> global function could work out of a central database that doesn't >>>>>decorate >>>>> the classes. >>>>> >>>>> I don't have a strong opinion either way right now. >>>>> >>>>> -Alex >>>>> >>>> >>>> From all my research on Closure's @implements handling, it seems like >>>>there >>>> should be at least one method/member in the @interface. So how will it >>>> handle 'Marker Interfaces', i.e. interfaces which have no methods. >>>> >>>> IChrome - which we have been discussing in the other thread is this >>>>kind of >>>> an interface. It is used to just mark an object so it can be used for >>>>type >>>> checking. >>>> >>>> Is this possible with Closure? Sorry, I have not set up to Closure >>>> properly on my machine. Can one of you try this out to see if it is >>>> possible? >>>> >>>> Thanks, >>>> Om >>>> >>>> >>>>> >>>>> On 7/29/13 10:49 AM, "Kessler CTR Mark J" <mark.kessler....@usmc.mil> >>>>> wrote: >>>>> >>>>> >Looking on it a second time, I guess you have to test it exists in >>>>>there >>>>> >for both, so maybe it's a moot issue. >>>>> > >>>>> >-Mark >>>>> > >>>>> >-----Original Message----- >>>>> >From: Kessler CTR Mark J [mailto:mark.kessler....@usmc.mil] >>>>> >Sent: Monday, July 29, 2013 1:43 PM >>>>> >To: dev@flex.apache.org >>>>> >Subject: RE: [FlexJS] Handling chrome elements >>>>> > >>>>> > I've gotten used to being able to do Type checks with "is". It >>>>>also >>>>> >stands out as a different format visually. I think the only problem >>>>> >with that change is, the child couldn't be null/undefined. It would >>>>>have >>>>> >to be able to run that method. Whereas the current "is" can compare >>>>>the >>>>> >datatype with it being null/undefined. >>>>> > >>>>> > >>>>> >-Mark >>>>> > >>>>> >-----Original Message----- >>>>> >From: Erik de Bruin [mailto:e...@ixsoftware.nl] >>>>> >Sent: Monday, July 29, 2013 12:59 PM >>>>> >To: dev@flex.apache.org >>>>> >Subject: Re: [FlexJS] Handling chrome elements >>>>> > >>>>> >Ah, the "is" issue. >>>>> > >>>>> >We don't seem to be able to get out from under a 'helper' method (or >>>>> >whatever the term-du-jour is for that thing) and a 'storage' property. >>>>> > >>>>> >Personally I like to go from this AS: >>>>> > >>>>> >if (child is IChrome) >>>>> > >>>>> >to this JS: >>>>> > >>>>> >if (child.is(IChrome)) >>>>> > >>>>> >That would make it relatively easy to work with it in the cross >>>>> >compiler. Another possibility is to have a global function, but I >>>>> >don't like that very much. >>>>> > >>>>> >Thoughts? >>>>> > >>>>> >EdB >>>>> > >>>>> > >>>>> > >>>>> >On Mon, Jul 29, 2013 at 4:23 PM, Alex Harui <aha...@adobe.com> wrote: >>>>> >> Thanks for that. I'm more interested in the runtime use of >>>>>interfaces. >>>>> >> What is the JS output for this AS? >>>>> >> >>>>> >> if (child is IChrome) >>>>> >> >>>>> >> It looked like FalconJS was going to create a $implements object on >>>>>each >>>>> >> class and "is" code would test against that. What should we do for >>>>> >> FalconJX? >>>>> >> >>>>> >> Thanks, >>>>> >> -Alex >>>>> >> >>>>> >> >>>>> >> On 7/28/13 11:50 PM, "Erik de Bruin" <e...@ixsoftware.nl> wrote: >>>>> >> >>>>> >>>More on how to write the JS side: >>>>> >>> >>>>> >>> >>>>> >>>>>https://developers.google.com/closure/compiler/docs/js-for-compiler#tags >>>>> >>> >>>>> >>>Search for '@implements'. It has a short but sweet example. >>>>> >>> >>>>> >>>EdB >>>>> >>> >>>>> >>> >>>>> >>> >>>>> >>>On Mon, Jul 29, 2013 at 8:43 AM, Erik de Bruin <e...@ixsoftware.nl> >>>>> >>>wrote: >>>>> >>>>>> >Also IChrome (looks like a Marker Interface) could lead to a >>>>>subtle >>>>> >>>>>> >problem >>>>> >>>>>> >on the JS side. I have not been following the conversation on >>>>>how >>>>> >>>>>>to deal >>>>> >>>>>> >with Interfaces on the JS side. If we are planning on using >>>>>'duck >>>>> >>>>>> >typing', >>>>> >>>>>> >then we could run into issues with empty interfaces. Or am I >>>>> >>>>>>missing >>>>> >>>>>> >something here? >>>>> >>>>>> I'm not sure what we'll end up doing for interfaces on JS. It >>>>>looks >>>>> >>>>>>like >>>>> >>>>>> some compiler code expects to list interfaces in an $implements >>>>> >>>>>>property >>>>> >>>>>> object. >>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> Can someone shine some light on this? Erik, Michael? >>>>> >>>> >>>>> >>>> Interfaces on the JS side are implemented for the Closure Compiler >>>>> >>>> using the @interface for declaration and the @implements JSDoc >>>>> >>>> annotation. FalconJx knows about this, so - with caution and >>>>>testing - >>>>> >>>> you should be able to approach interfaces the same in JS as in AS. >>>>> >>>> >>>>> >>>> Let me know if I can help out with some example code or something. >>>>> >>>> Also, if you run into problems, I can alway crack open FalconJx >>>>>and >>>>> >>>> create the solution you would like to see. >>>>> >>>> >>>>> >>>> EdB >>>>> >>>> >>>>> >>>> >>>>> >>>> >>>>> >>>> -- >>>>> >>>> Ix Multimedia Software >>>>> >>>> >>>>> >>>> Jan Luykenstraat 27 >>>>> >>>> 3521 VB Utrecht >>>>> >>>> >>>>> >>>> T. 06-51952295 >>>>> >>>> I. www.ixsoftware.nl >>>>> >>> >>>>> >>> >>>>> >>> >>>>> >>>-- >>>>> >>>Ix Multimedia Software >>>>> >>> >>>>> >>>Jan Luykenstraat 27 >>>>> >>>3521 VB Utrecht >>>>> >>> >>>>> >>>T. 06-51952295 >>>>> >>>I. www.ixsoftware.nl >>>>> >> >>>>> > >>>>> > >>>>> > >>>>> >-- >>>>> >Ix Multimedia Software >>>>> > >>>>> >Jan Luykenstraat 27 >>>>> >3521 VB Utrecht >>>>> > >>>>> >T. 06-51952295 >>>>> >I. www.ixsoftware.nl >>>>> >>>>> >>> >>> >>> >>>-- >>>Ix Multimedia Software >>> >>>Jan Luykenstraat 27 >>>3521 VB Utrecht >>> >>>T. 06-51952295 >>>I. www.ixsoftware.nl >> > > > > -- > Ix Multimedia Software > > Jan Luykenstraat 27 > 3521 VB Utrecht > > T. 06-51952295 > I. www.ixsoftware.nl -- Ix Multimedia Software Jan Luykenstraat 27 3521 VB Utrecht T. 06-51952295 I. www.ixsoftware.nl