用。或[]访问对象属性 - 有什么区别?

时间:2012-02-01 14:38:35

标签: actionscript-3 object actionscript

下面写的代码(i)和(ii)有什么区别?

(ⅰ)

var obj:Object = new Object();
obj.attribute = value ;

(ⅱ)

var obj:Object = new Object();
obj["key"] = value;

如果我写这个,是否有任何运行时的影响:

var obj:Object = new Object();
obj.somekey = value1 ;
obj["someKey"] = value2 ;

请解释。

1 个答案:

答案 0 :(得分:21)

区别在于查找机制:如果使用点语法,编译器将在编译时知道您正在访问该对象的属性。如果你使用括号语法,属性的实际查找是在运行时完成的,并且必须有更多的类型检查 - 毕竟,你可以动态组合键字符串,值可以改变,或者你甚至可以调用函数而不是变量等。

结果是性能上的显着差异: Bracket语法的执行时间大约是点语法的三倍。

这是一个小小的速度测试来说明我的观点:

var start : int = getTimer();

var obj:Object = { something : "something" };

for (var i : int = 0; i < 100000000; i++) {
    var n:String = obj.something;
}

trace ("Time with dot syntax: "+(getTimer() - start));

start = getTimer();

for (i = 0; i < 100000000; i++) {
    var o:String = obj["something"];
}

trace ("Time with bracket syntax: "+(getTimer() - start));

如果两者相同,除了符号,它们应该花费相同的时间。但正如你所看到的,事实并非如此。在我的机器上:

Time with dot syntax:      3937
Time with bracket syntax:  9857