ActionScript3 |对象或数组

时间:2015-01-21 20:12:46

标签: actionscript-3 actionscript

- Object和Array之间有什么区别?我什么时候应该使用Array以及何时使用Object?

请举例 - 如何正确使用它们。

2 个答案:

答案 0 :(得分:2)

Objects

当我们在ActionScript 3中讨论Object时,请务必注意所有内容继承Object并且一个vanilla Object实例是{{ 1}}(意味着您可以自由地将数据附加到它而不在类定义中定义数据)。

您可以使用dynamicnew Object()对象文字语法初始化一个vanilla对象。

动态对象是{ }存储,这意味着它存储了可用于稍后引用值的字符串的值。可以使用点表示法(key:value)或方括号表示法(object.key)以这种方式设置或检索值。两者之间的主要区别在于,使用方括号表示法,您可以:

  • 使用动态键获取或设置值(例如,在构建字符串,解析列出属性的文件等之后
  • 包含包含空格等非法字符的密钥。

所有这一切的完整示例如下:

object['key']

对象文字语法也能够接受var data:Object = { }; data.firstName = 'John'; data['lastName'] = 'Smith'; trace(data['firstName'] + ' ' + data.lastName); // John Smith 对,这意味着上面的内容可以简化为:

key:value

使用var data:Object = { firstName: 'John', lastName: 'Smith' }; 循环实现对key:value Object商店的迭代:

for..in

Arrays

请注意,基于上述内容,我们知道for(var prop:String in data) { trace(prop, data[prop]); } 直接继承了ArrayObject课程也是Array,这意味着您可以使用与dynamic相同的key:value存储空间。这就是它开始变得混乱的地方。

可以使用以下方法初始化数组:

  • Object
  • new Array()数组文字语法。
  • 顶级Array()功能。

数组能够存储顺序数据与任意值集合。虽然我们添加到上面[]对象的值看似是顺序的,但实际上它们存储在无特定顺序中。

Arrays使用基于零的数字索引代替'keys'存储顺序数据,如下所示:

data

Arrays提供了处理从数组头部和尾部添加和删除元素的方法,如var array:Array = []; array[0] = 'hello'; trace(array[0]); // hello push()pop()shift()。数组也能够提供它们的unshift(),表示该数组中元素的数量。

当你开始使用带数组的非数字键时会出现混淆:

length

我们实际上回到数组继承的array['prop'] = 10; 而不是向顺序列表中添加元素,而是添加一个值为Object的任意prop键。在这种情况下,我们在数组(字符串10)中有一个,并且附加到数组实例的名为hello的动态属性本身(不在数组中)。

要迭代一系列项目,我们可以使用普通prop循环或for循环:

for each

重要的是要注意for(var index:int = 0; i < array.length; i++) { trace(array[index]); } // Or: for each(var value:String in array) { trace(value); } 循环仅在数组中的所有值与该循环的定义中使用的相同类型(在本例中为for each)时才有效。 / p>

Vectors

矢量是一种专门的顺序数据存储,它允许您通过定义将要存储的对象类型来从静态类型检查中受益。例如,我们可以使用以下语法创建String个对象的列表:

Sprite

因为输入了Vectors,所以在列表中添加非Sprite值会给你一个编译时错误,从而节省了很多潜在的错误。向量还提供比数组更快的读写访问。

答案 1 :(得分:1)

数组用于数字访问,并且从零开始(0是第一个元素)

var array:Array = new Array("a", "b", "c");
array[0] = "z";  // change first element to z
array.push("d"); // add d to end

trace(array[3]) // output: d
trace(array)    // output: z,b,c,d

可以循环播放数组。

for (var i:int = 0; i < array.length; i++) 
{ 
    trace(array[i]); 
}

对象可用于各种事物。与Array相比,它可以允许关联数组(使用键而不是整数的字符串)

var assocArray:Object = {me:"Mike", you:"Gabriel"};

// property-style access
trace( assocArray.me ) // output Mike

// access with string
trace( assocArray["you"] ) // Gabriel