2011-03-18 8 views
1

개체에 네임 스페이스 내에 정의 된 멤버가 있는지 확인하고 싶습니다. 경우의 QName로 hasOwnProperty 방법을 사용하려고했지만,이 지원되지 않는 :개체가 네임 스페이스 내에 속성이 있는지 확인하는 방법은 무엇입니까?

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

는 지금까지 내가 말할 수있는 가장 좋은 방법은 속성에 액세스하려고하는 것입니다. 예를 들어

,이 수행하는 유틸리티 기능 :

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

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

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

공용뿐만 아니라 네임 스페이스 특성을 확인할 수 있습니다

관련 문제