Я ищу путь javascript к ассоциативной карте / массиву / хэшу, который использует объекты в качестве ключей.Замена того, что вы можете сделать в ActionScript 3 с помощью flash.utils.Dictionary.Я уверен, что у java и C # тоже есть что-то похожее.
Это будет работать так же, как и обычный универсальный объектно-ориентированный объект [ключ], но вместо строковых свойств вы используете целые объекты в качестве ключей (это будетсовпадает не с toString (), как Object, а с уникальным экземпляром).Очень удобно для украшения объектов, которыми вы не владеете (используя объект в качестве ключей и ваши украшения в качестве значения).
Псевдокод:
decorations[objectA] = [lights, sparkles, ..];
decorations[objectB] = [skulls, spikes, ..];
if(someObject in decorations)
updateDecorations(someObject , decorations[someObject])
Иллюстрация в javascript и почему она не работаетдля объектов:
// make two objects with same toString() return value
var objA = {toString:function(){return 'foo'}};
var objB = {toString:function(){return 'foo'}};
//use objects as keys
var assoc = {};
assoc[objA] = 'dataA';
assoc[objB] = 'dataB';
// seperate instances are not equal
console.log(objA == objB);
// still same data associated: dataB, dataB
console.log(assoc[objA]);
console.log(assoc[objB]);
//with a Dictionary instead of this would be dataA, dataB
Основная проблема заключается в том, что мне нужно сопоставлять только объекты (они используются каким-то другим процессом, в который вам не нужно вмешиваться, но нам все равно нужна ассоциация).Так что никакой магии .__ хэш-реквизит или toString () перегрузка (если это возможно).
Есть идеи?
edit: я проверил, но это все toString () или добавление магических реквизитов