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

Flash ActionScript中的obj[name]和obj.name有什么区别?,flash,actionscript-3,Flash,Actionscript 3,我在论坛上听到了不同的消息,但无法找到关于obj[name]和obj.name之间区别的具体答案。编译器对它们有不同的处理方式吗?取决于obj是否是动态类。obj[name]是对属性的运行时检查,如果它不存在,as obj.name将产生编译时错误。实际上,它是obj[expression]与obj.identifier的比较 前者总是导致动态运行时查找,而后者可以并且将在编译时进行检查。因此,如果obj是密封的(即非动态的),并且没有与标识符匹配的属性,它可能会产生编译时错误。此外,如果属性不

我在论坛上听到了不同的消息,但无法找到关于obj[name]和obj.name之间区别的具体答案。编译器对它们有不同的处理方式吗?

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

实际上,它是obj[expression]与obj.identifier的比较

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

总结:与obj[expression]相比,obj.identifier是类型安全的明显更快

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

如果它是一个变量,而您没有名称

,那么您可以使用[]方法,此外,it obj['name']有一些明显的用例,如果没有这些用例,这是不可能的(动态查找)