2010-04-12 53 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")); 

我預計結果是真實的,真的,假的,但真實的結果是假的,假的,真的。 爲什麼?

回答

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"],從而導致運行時異常。但是,代碼正常工作沒有問題。

所以這真的很有趣。