开发者

How to check if object has a property within namespace?

开发者 https://www.devze.com 2023-02-18 03:39 出处:网络
I want to check if object has a defined member within namespace. If was trying to use hasOwnProperty method with QName, but it\'s not supported:

I want to check if object has a defined member within namespace. If was trying to use hasOwnProperty method with QName, but it's not supported:

package {

    import flexunit.framework.Assert;

    public class ObjectTest extends Object {

        public namespace some_public_namespace;

        some_public_namespace var definedMember : String;

        [Test]
        public function testMemberWith开发者_开发问答inNamespace () : void {

            // this should be elegant way... but actualy it doesn't work
            try {
                Assert.assertTrue( "Expect hasOwnProperty method work with QName", this.hasOwnProperty( new QName( some_public_namespace, "definedMember" ) ) );
            } catch ( error : Error ) {
                Assert.assertTrue( "hasOwnProperty method failed to work with QName", false );
            }

            // this is non elegant way that works
            try {
                this[ new QName( some_public_namespace, "definedMember" ) ];
                Assert.assertTrue( "Expect no error", true );
            } catch ( error : Error ) {
                Assert.assertTrue( "Expect this line not to be runned", false );
            }       


            try {
                this[ new QName( some_public_namespace, "undefinedMember" ) ];
                Assert.assertTrue( "Expect this line not to be runned", false );
            } catch ( error : Error ) {
                Assert.assertTrue( "Expect property doesn't exist", true );
            }

        }


    }

}


As far as I can tell, the best way is to try to access the property.

For example, a utility function that does this:

public static function propertyIsAvailable(object:Object,
        propertyName:Object):Boolean
{
    var available:Boolean = false;

    try {
        var v:* = object[propertyName];
        available = true;
    } catch (e:Error) {
    }

    return available;
}

Then you can check for public as well as namespace properties:

var available:Boolean = propertyIsAvailable(object, "myPublicProperty");

var available:Boolean = propertyIsAvailable(object,
    new QName(some_namespace, "myNamespaceProperty"));
0

精彩评论

暂无评论...
验证码 换一张
取 消