Gordon's way does work -- and in fact it can be taken even further by
not only checking that there is a property called "getChildren", but
also that that property is a function:
if (obj.hasOwnProperty("getChildren") &&
typeof obj["getChildren"] == "function")
{
children = obj.getChildren();
}
However, I think Dordea's answer -- to test "obj is Container" -- is
actually what you should be using. You are not really trying to check
whether obj has a getChildren() function -- you are trying to check
whether, semantically speaking, it is a container.
To take the old object-oriented programming example, let's say there
was a class called Artist, with a function draw(). If you just tested
for the existence of function "draw" and then called it, that doesn't
necessarily mean you are asking an Artist to draw -- that just means
you have asked *something* to draw. Maybe Cowboy also has a draw()
function, to draw his gun. Oops!
So back to your example, I think probably what you're really trying to
say is, "If the object that was passed in is a Container, then I want
to get its children." So, "if (obj is Container)" is the way to go.
- Mike Morearty, Flex Builder
--- In [email protected], "Gordon Smith" <[EMAIL PROTECTED]> wrote:
>
> I think this may be another way...
>
> if (obj.hasOwnProperty("getChildren"))
> children = obj.getChildren();
>
> - Gordon
>
> ________________________________
>
> From: [email protected] [mailto:[EMAIL PROTECTED] On
> Behalf Of dordea cosmin
> Sent: Tuesday, April 03, 2007 12:13 PM
> To: [email protected]
> Subject: Re: [flexcoders] getChildren
>
>
>
> only objects that inherit the Container class have this functions. When
> i have a situation like yours, I usually do something like :
> if ( obj is Container)
> {
> //code here
> }
>
> and it works fine. It is possible not to work if your object
> was originally an Object , and you further created your
> object using a class reference.
>
>
> ----- Original Message ----
> From: Michael Schmalle <[EMAIL PROTECTED]>
> To: [email protected]
> Sent: Tuesday, April 3, 2007 11:51:48 AM
> Subject: Re: [flexcoders] getChildren
>
>
>
> Hi,
>
> You could do this;
>
> try {
> children = obj.getChildren( );
> }
> catch (e:Error)
> {
> trace(e, "obj did not have getChildren( )");
> }
>
>
> Peace, Mike
>
>
>
>
> On 03 Apr 2007 11:41:25 -0700, blc187 <[EMAIL PROTECTED] com
> <mailto:[EMAIL PROTECTED]> > wrote:
>
> is there a way to tell if an object has a getChildren method
> before
> calling it?
>
> I'm calling something that takes any type as the first argument
> public function myFunc(obj:* ):void
>
> I need to tell if obj has a getChildren( ) method before I call
> it and
> get an error saying Error #1006: getChildren is not a function.
>
>
>
>
>
>
>
>
> --
> Teoti Graphix
> http://www.teotigra phix.com <http://www.teotigraphix.com>
>
> Blog - Flex2Components
> http://www.flex2com ponents.com <http://www.flex2components.com>
>
> You can find more by solving the problem then by 'asking the question'.
>
>
> ________________________________
>
> Get your own web address.
> <http://us.rd.yahoo.com/evt=49678/*http://smallbusiness.yahoo.com/domain
> s/?p=BESTDEAL>
> Have a HUGE year through Yahoo! Small Business.
> <http://us.rd.yahoo.com/evt=49678/*http://smallbusiness.yahoo.com/domain
> s/?p=BESTDEAL>
>