Как проверить, есть ли у объекта свойство в пространстве имен? - PullRequest
1 голос
/ 18 марта 2011

Я хочу проверить, есть ли у объекта определенный член в пространстве имен.Если пытался использовать метод hasOwnProperty с QName, но он не поддерживается:

package {

    import flexunit.framework.Assert;

    public class ObjectTest extends Object {

        public namespace some_public_namespace;

        some_public_namespace var definedMember : String;

        [Test]
        public function testMemberWithinNamespace () : 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 );
            }

        }


    }

}

1 Ответ

1 голос
/ 18 марта 2011

Насколько я могу судить, лучший способ - попытаться получить доступ к собственности.

Например, вспомогательная функция, которая делает это:

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

Затем вы можете проверить как общедоступные, так и свойства пространства имен:

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

var available:Boolean = propertyIsAvailable(object,
    new QName(some_namespace, "myNamespaceProperty"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...