1

所以在 actionscript 3 中,Object 类的实例可以用作关联数组:

var doNotHaveSexWith:Object = new Object();
doNotHaveSexWith['mum'] = new Person(...);
doNotHaveSexWith['dad'] = new Person(...);
doNotHaveSexWith['dave'] = new Person(...);

假设我有一些课程,其中一个成员是一个只读的“对象”,其中包含我的人员集合。

我认为如果我返回这个“对象”,代码可读性会受到重大影响,因为程序员怎么知道如何处理它?有人知道它是一个集合的唯一方法是他们阅读代码或评论......

表明一个对象是一个集合而不是一个简单对象的最佳方式是什么?

选项:

  • 创建一个动态类,简单地从 Object 扩展,称为“AssociativeArray”或其他东西,这样代码变得更具可读性......

  • 使用像AS3 Datastructures Library这样的东西,虽然这看起来有点矫枉过正。

  • 只需将单词 Collection 附加到变量名的末尾?

例如:

var hotPeopleCollection:Object = new Object();
hotPeopleCollection['me'] = new Person(...); 
hotPeopleCollection['sandrasully'] = new Person(...);

你怎么看?

更新:我决定使用扩展字典的自定义类。这样我可以在搜索函数周围包装一个合理的访问函数:hasOwnProperty并给类一个有意义的名称。

我选择 Dictionary over Object 的原因有两个:

  1. 字典对集合更直观
  2. 字典似乎在 O(1) 处执行搜索。请参阅这个相当非正式的字典 vs 数组 vs 对象性能基准
4

2 回答 2

2

使用字典。

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/Dictionary.html

您仍然可以使用字符串作为键,或任何对象。

var dict:Dictionary = new Dictionary();
var obj:Object = new Object();
var key:Object = new Object();
key.toString = function() { return "key" }

dict[key] = "Letters";
obj["key"] = "Letters";

dict[key] == "Letters"; // true
obj["key"] == "Letters"; // true 
obj[key] == "Letters"; // true because key == "key" is true because key.toString == "key"
dict["key"] == "Letters"; // false because "key" === key is false
delete dict[key]; //removes the key

很多开发者(包括我自己)会告诉你:永远不要使用对象。你基本上是在蒙住你的编译器。始终要么使用内置数据类型,要么自己创建。现在显然在这种情况下您不了解字典,但作为一般规则,如果您认为您想使用普通的旧 Object 数据类型,请再想一想。

更新:

另一个您可能会觉得有帮助的链接:

http://www.gskinner.com/blog/archives/2006/07/as3_dictionary.html

于 2009-10-14T23:53:57.410 回答
0

我会反其道而行之,吐出令人讨厌的动态型立场。只需使用一个对象。它一个关联数组。变量的名称和上下文应该足够清楚。不要让你的代码比它需要的更复杂。如果你认为它应该是一个类,那就让它成为一个类。这是一个简单的地图,使用一个对象。

没有理由过火。

于 2009-10-15T00:21:27.367 回答