ActionScript中的obj [name]和obj.name有什么区别?

时间:2010-02-17 01:26:48

标签: flash actionscript-3

我在论坛中听到过不同的内容,但无法就obj [name]和obj.name之间的区别找到具体的答案。编译器是否以不同方式对待它们?

3 个答案:

答案 0 :(得分:5)

取决于obj是否为动态类。 obj [name]是属性的运行时检查,如果obj.name不存在则会产生编译时错误。

答案 1 :(得分:4)

实际上,它是obj [表达]与obj.identifier

前者总是导致动态运行时查找,而后者可以并且将在编译时检查。因此,如果obj被密封(即不是动态的)并且没有与标识符匹配的属性,则它可以产生编译时错误。此外,如果属性不是动态的(即动态对象的运行时添加属性),但在对象类中定义,则此信息用于执行更快的查找。

总结:与obj [表达式]相比,obj.identifier 类型安全显着更快

答案 2 :(得分:2)

var foobar:String = "id";

var obj:Object = new Object{ id:"the value of variable" };

trace( obj.id ); // the value of variable
trace( obj[ foobar ] ); // value of variable

如果它是一个变量并且你没有名字

,你会使用[]方法