NIN*_*OOP 6 actionscript object actionscript-3
下面写的代码(i)和(ii)有什么区别?
(一世)
var obj:Object = new Object();
obj.attribute = value ;
Run Code Online (Sandbox Code Playgroud)
(ⅱ)
var obj:Object = new Object();
obj["key"] = value;
Run Code Online (Sandbox Code Playgroud)
如果我写这个,是否有任何运行时的影响:
var obj:Object = new Object();
obj.somekey = value1 ;
obj["someKey"] = value2 ;
Run Code Online (Sandbox Code Playgroud)
请解释.
wel*_*rat 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));
Run Code Online (Sandbox Code Playgroud)
如果两者相同,除了符号,它们应该花费相同的时间.但正如你所看到的,事实并非如此.在我的机器上:
Time with dot syntax: 3937
Time with bracket syntax: 9857
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
735 次 |
| 最近记录: |