Pour des raisons de performances, il peut etre trés utile d'attribuer un identifiant unique à un objet. En effet, un identifiant numérique peut devenir index dans un tableau, et ainsi augmenter considérablement les performances pour retrouver celui-ci sans avoir à parcourir la totalité d'un tableau.

C'est pourquoi j'ai développé une classe ObjectCollector, qui permet d'attribuer un identifiant unique à un objet, et éventuellement de retrouver cet objet à partir de ce dernier, mais uniquement s'il a été "collecté" (on a pas toujours besoin de le retrouver par son id)... ;)

/**
 * Collect objects and give them a unique Id.
 * @author  <a href="http://www.lalex.com/">LAlex</a>
 * @version 1.0
 * @since 2005-08-19
 */

class com.lalex.core.ObjectCollector {
        // Stores last given id
        private static var __id:Number = 0;
        // Store collected objects
        private static var __instances:Array = [];
        /**
        * If not already done, return a unique Id for the object
        * @param o
        * @return Object's unique id
        */

        public static function uId(o):Number {
                if (!o["__ocId"]) {
                        o["__ocId"] = ++__id;
                        _global.ASSetPropFlags(o, "__ocId", 7, 1);
                }
                return o["__ocId"];
        }
        /**
        * Collect an object. Must be call before using getById method
        * @param o Object to be collected
        * @return Object's unique id
        */

        public static function collect(o):Number {
                __instances[uId(o)] = o;
                return uId(o);
        }
        /**
        * Release an object. Must be used
        * before any delete of a collected object
        * @param o Object to be released
        */

        public static function release(o) {
                delete __instances[uId(o)];
        }
        /**
        * Release all collected objects
        */

        public static function clear() {
                var n:Number = __instances.length;
                while(n-- > 0) {
                        release(__instances[n]);
                }
        }
        /**
        * Retrieve an object from its id
        * The object must have been collected first
        * @param id Object's id
        * @see #collect
        */

        public static function getById(id:Number) {
                return __instances[id];
        }
}
Utilisation : import com.lalex.core.ObjectCollector;
// Objects
var o1 = {a:150, b:"LAlex"};
var o2 = {d:false, e:"Blablabla"};
// Collect the 'o1' object
var o1id = ObjectCollector.uId(o1);
trace("o1 id : " + o1id); // o1 id : 1
ObjectCollector.collect(o1);
trace("Retrieved ? " + (o1 == ObjectCollector.getById(o1id))); // Retrieved ? true
// Release 'o1' object
ObjectCollector.release(o1);
trace("Retrieved ? " + (o1 == ObjectCollector.getById(o1id))); // Retrieved ? false
// Get the 'o2' unique id
var o2id:Number = ObjectCollector.uId(o2);
trace("o2 id : " + o2id); // o2 id : 2
trace("Trouvé ? " + (o2 == ObjectCollector.getById(o2id)));// Retrieved ? false

::Télécharger ObjectCollector 1.0::