将对象链接在一起而不在javascript中触摸它们

时间:2013-09-11 10:32:19

标签: javascript design-patterns object

我有简单的问题,我正在寻找优雅的解决方案。

我的HTML中有列表。我使用jquery将其项目映射到数组中。所以我有一些对象。然后我为每个项目制作(再次使用jquery)按钮。所以我有成对,项目和按钮在每对。

现在让我们假设,我想制作结构,将这些对以某种方式链接在一起。因此,如果我使用jquery选择任何元素,那么我将能够找到与之关联的元素。我还有一些想法,但看起来太复杂了。我正在寻找设计模式或非常接近它的东西。

HTML结构:

<ul>
    <li>item 1</li>
    <li>item 2</li>
    <li id="active">item 3</li>
</ul>

到目前为止,我的想法在javascript / jquery中无效(它非常简化):

var list = [];

$('li').each(function() {
    list.push($(this));
    });

// this should be object, that links list items with buttons
var linker = {};

for (var item in list) {
    var button = $('<button>Do something!</button>');

    // this part is crazy O.o
    linker[list[item]] = button;
    linker[button] = list[item];
    // it doesnt work, becouse toString() function make from any of these objects "[object Object]"
}


// Now code like this should be able to find button that belongs to item 3

var active = $('#active')[0];

var result = linker[active];

请告诉我最简单的方法,如何在不触及其属性的情况下将两个对象链接在一起。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  

如何在不触及其属性的情况下将两个对象链接在一起。

如您所见,作为键值映射的对象不起作用,因为其键是字符串化的。在将来的JavaScript中,您将能够使用Map(甚至更适合您的WeakMap),但这种情况尚无法实现。但是,您可以使用Map shim,它通过将键和值对象存储在具有相应索引的数组中来工作。如果您实现自己的,也可以在相同的数组上进行反向查找。