Actionscript 3 ActionScript3 |对象或数组
对象和数组之间的区别是什么?我应该何时使用数组以及何时使用对象Actionscript 3 ActionScript3 |对象或数组,actionscript-3,actionscript,Actionscript 3,Actionscript,对象和数组之间的区别是什么?我应该何时使用数组以及何时使用对象 请给出示例-如何正确使用它们。数组用于数字访问,并且是基于零的(0是第一个元素) 数组可以循环通过 for (var i:int = 0; i < array.length; i++) { trace(array[i]); } 当我们在ActionScript3中讨论对象时,需要注意的是,所有内容都继承对象,并且普通的对象实例是动态的(这意味着您可以自由地将数据附加到它,而无需在类定义中定义该数据) 您可以使用
请给出示例-如何正确使用它们。数组用于数字访问,并且是基于零的(0是第一个元素) 数组可以循环通过
for (var i:int = 0; i < array.length; i++)
{
trace(array[i]);
}
当我们在ActionScript3中讨论对象时,需要注意的是,所有内容都继承对象
,并且普通的对象
实例是动态的
(这意味着您可以自由地将数据附加到它,而无需在类定义中定义该数据)
您可以使用newobject()
或{}
对象文字语法初始化普通对象
动态对象是一个key:value
store,这意味着它根据字符串存储值,这些字符串可用于以后引用值。可以使用点符号(object.key
)或方括号符号(object['key']
)以这种方式设置或检索值。两者之间的主要区别在于,使用方括号表示法,您可以:
- 使用动态键获取或设置值(例如,在构建字符串、解析列出属性的文件等之后)
- 具有包含非法字符(如空格)的键
所有这些的完整示例如下:
var data:Object = { };
data.firstName = 'John';
data['lastName'] = 'Smith';
trace(data['firstName'] + ' ' + data.lastName); // John Smith
object literal语法也可以接受key:value
对,这意味着上述内容可以简化为:
var data:Object = { firstName: 'John', lastName: 'Smith' };
使用for..in
循环实现对对象存储的键的迭代:
for(var prop:String in data)
{
trace(prop, data[prop]);
}
for(var index:int = 0; i < array.length; i++)
{
trace(array[index]);
}
// Or:
for each(var value:String in array)
{
trace(value);
}
请注意,基于以上内容,我们知道数组
直接继承对象
。数组
类也是动态的
,这意味着您可以使用与对象
相同的键:值
存储。这就是它开始混淆的地方
可以使用以下方法初始化阵列:
new Array()
[]
数组文字语法
- 顶层函数
数组能够存储顺序数据,而不是任意的值集合。虽然我们添加到上面的data
对象中的值看起来是顺序的,但它们实际上并没有按特定顺序存储
数组使用基于零的数字索引代替“键”存储顺序数据,如下所示:
var array:Array = [];
array[0] = 'hello';
trace(array[0]); // hello
数组提供了从数组的头部和尾部添加和删除元素的方法,如push()
、pop()
、shift()
和unshift()
。数组还可以提供其长度,表示该数组中的元素数
当您开始对数组使用非数字键时,会出现混淆:
array['prop'] = 10;
我们实际上没有向顺序列表添加元素,而是返回数组从属性继承的对象
,添加一个值为10
的任意prop
键。在这种情况下,数组中有一个项(字符串hello
),以及附加到数组实例本身(不在数组中)的名为prop
的动态属性
要在项目数组上迭代,我们可以使用正常的for
循环或for each
循环:
for(var prop:String in data)
{
trace(prop, data[prop]);
}
for(var index:int = 0; i < array.length; i++)
{
trace(array[index]);
}
// Or:
for each(var value:String in array)
{
trace(value);
}
由于向量是类型化的,因此在列表中添加非Sprite值将导致编译时错误,从而节省大量潜在的错误。向量还提供比数组更快的读写访问速度。当您开始对数组使用非数字键时,会出现混淆:–有人会故意这样做吗?我可以想到它的一些黑客用途,但这是非常不恰当的。@如果你来自数组工作方式不同的背景(例如PHP),那么你可能最终会遇到这种情况。
var sprites:Vector.<Sprite> = new <Sprite>[];