Javascript 页面上引用实例的可接受模式是什么?

Javascript 页面上引用实例的可接受模式是什么?,javascript,jquery,oop,dom,Javascript,Jquery,Oop,Dom,我正在寻找在同一页面上处理js对象实例时可以接受的模式。如果有一个线程已经涵盖了这一点,链接将不胜感激 这是一个值得参考的问题。对象/特征实例化后,必须在稍后的某个点引用它 我见过jQuery人员使用数据在目标DOM元素上存储对对象的引用。但是,如果可能的话,我对框架不可知选项感兴趣 如果有一种干净、可行的方法来为DOM元素生成唯一的id,这是可以实现的。唉,我还没有找到 所以我的问题是:通过DOM元素存储对对象的引用的最佳方式是什么,以便您可以在将来的任意时间引用它 希望这是有道理的,我不是漫

我正在寻找在同一页面上处理js对象实例时可以接受的模式。如果有一个线程已经涵盖了这一点,链接将不胜感激

这是一个值得参考的问题。对象/特征实例化后,必须在稍后的某个点引用它

我见过jQuery人员使用数据在目标DOM元素上存储对对象的引用。但是,如果可能的话,我对框架不可知选项感兴趣

如果有一种干净、可行的方法来为DOM元素生成唯一的id,这是可以实现的。唉,我还没有找到

所以我的问题是:通过DOM元素存储对对象的引用的最佳方式是什么,以便您可以在将来的任意时间引用它

希望这是有道理的,我不是漫无目的的


谢谢。

没有任何东西可以阻止您维护自己的缓存:

var cache = [];

function locate(el) {
    // search for the element within our cache.
    for (var i=0;i<cache.length;i++) {
        if (cache[i].elem === el) {
            return cache[i].data;
        };
    };

    // if we get this far, it isn't in the cache: add it and return it.
    return cache[cache.push({
        elem: el,
        data: {}
    }) - 1].data;
};

// used to add data to an element and store it in our cache.
function storeData(el, data) {
    var store = locate(el);

    for (var x in data) {
        store[x] = data[x];
    };
};

// used to retrieve all data stored about the target element.
function getData(el) {
    return locate(el);
};

与经典OOP语言不同,JavaScript中的对象可以进行扩充。这没什么错;这就是JavaScript的设计使用方式:

写:

document.getElementById'foo'。customAttribute=5

阅读:

alert document.getElementById“foo”.customAttribute


如果你不想改变原来的对象,指向它的唯一方法就是使用前面一个答案中提到的词典;但是,您不需要进行线性搜索来查找对象:只要您为每个元素使用ID(可能不是其HTML ID而是自定义ID),就可以在对数时间内完成搜索。在HTML5中,允许在元素上使用以数据开头的自定义属性。您可以将该属性设置为某个ID,然后使用该ID引用特定的对象实例。@pimvdb当然可以,这样做可以。但是,如果有任何方法可以在不实际修改DOM本身的情况下实现这一点,那么最好是这样。但这可能是不可能的。谢谢你的评论。哦,对不起。在这种情况下,您可以设置一个对象,该对象将充当元素ID和对象引用之间的字典。只是一个想法,如果它是胡说八道,请忽略它。@primvdb它很有意义。但是,它需要目标DOM元素设置一个id。我不确定这是否是使用此代码所需要的。请不要难过。任何建设性的回答都是有帮助的@spot:为什么不修改DOM更好?这似乎是一种非常合理的方法,这就是为什么大多数库都这样做,jQuery就是这样工作的。不要认为这是DOM污染,而是DOM增强;好的,是的。因此,这与使用jQuery的数据框架完全相同,但需要自己构建。我目前有一个类似于此的实现。然而,在缓存堆栈中循环,只是为了查看元素是否存在,这感觉太脏了如果这是唯一的办法,那就是它。多谢你的回答。DOM交互很昂贵,字典很好用。谢谢
storeData(document.getElementById("foo"), {
    something: 4,
    else: "bar"
});

var data = getData(document.getElementById("foo"));
alert(data.something); // "4";