我想我写了一个简单的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。