我想我写了一个简单的DOM缓存机制来提高效率,避免多次$('blah')调用,例如:

if ($('foo').length) {
    $('foo').bar();
}


因此,我在项目主对象下创建了一个DomCache子对象:

MyLib.DomCache = {};


当我需要一个元素的jQuery对象时,我会查看DomCache,如果找到了它,我会使用它,否则我将创建它,然后将其放入DomCache对象中。我认为这将是达到此目的的良好语法:

MyLib.DomCache.foo = MyLib.DomCache.foo || $('foo');
if (MyLib.DomCache.foo.length)
    MyLib.DomCache.foo.bar();


但是现在我认为.get()吸气方法可能会更好:

MyLib.DomCache.get('foo').bar();


简直我无法实现!我不知道如何实现这种方法!

// THIS IS THE QUESTION!
MyLib.DomCache.get = function(element){
    // TODO: If the passed `element` has been cached previously,
    // return it. If not, cache it in the MyLib.DomCache object and then return it.
};


任何帮助/想法吗?
为什么有那么多物体?老实说,该项目非常大,因此我认为我必须将所有内容包装在父对象中,以便更好地进行访问!

最佳答案

MyLib.DomCache = {
    pool: new Array(),
};

MyLib.DomCache.get = function(selector){
    if(this.pool[selector]){
        console.log('Existing element returns!'); // debug
        return this.pool[selector];
    }else{
        console.log('Element has been created & returned!'); // debug
        return this.pool[selector] = $(selector);
    }
};

// Test
if(MyLib.DomCache.get('#foo').length){
    MyLib.DomCache.get('#foo').bar();
}


我知道您担心的是什么,它使我想起Singleton Pattern

10-08 02:13