2010-04-12 4 views
0

a.AsНекоторые вопрос имя свойства объекта в ActionScript3

package 
{ 
    public class A 
    { 
     public static var someObject:Object = { 
      (B.SOME_CONST): { value: 10 } 
     }; 
    } 
} 

B.as

package 
{ 
    public class B 
    { 
     public static const SOME_CONST:String = "someStringConst"; 
    } 
} 

И это тестовый код.

var obj:Object = A.someObject; 
trace(obj.hasOwnProperty(B.SOME_CONST)); 
trace(obj.hasOwnProperty("someStringConst")); 
trace(obj.hasOwnProperty("SOME_CONST")); 

Я ожидал, что результатом будет true, true, false, но реальный результат - false, false, true. Почему?

ответ

0

По какой-то причине изменение линии на (B["SOME_CONST"]): {value:10} работает, хотя скобки все равно должны быть там. Я не смог найти причину, почему это так. Это определенно ошибка.

Сначала я думал, что это была проблема с парсер спотыкаясь точку или что-то, но после того, как еще несколько тестов, это, кажется, не так:

 
package 
{ 
    public class A 
    { 
     public var someObject:Object = { 
      (C.b["SOME_CONST"]): { value: 10 } 
     }; 
    } 
} 
package { 
    public class B 
    { 
     public static const SOME_CONST:String = "someStringConst"; 
    } 
} 
package { 
    public class C 
    { 
     public static var b:Class = B; 
    } 
} 

Если бы это была проблема с синтаксический анализатор, он разрешит b["SOME_CONST"] и, таким образом, исключение во время выполнения. Однако код работает без проблем.

Так что это действительно интересно.

Смежные вопросы