jQuery在去除缓存数据的一个失误

来源:Ruby's Louvre 时间:2009-12-14 20:40:00 

如果独自放着jQuery做事,它绝对做得很好,但jQuery充许与其他库共存在,有些事就防不胜防了。看下面代码


data :function (elem, name,data){ 
//略 
}, 
removeData: function (elem, name) { 
elem = elem == window ? windowData : elem; 
var id = elem[expando]; 
// If we want to remove a specific section of the element's data 
if (name) { 
if (jQuery.cache[id]) { 
//★★★★★★★ 
// Remove the section of cache data 
delete jQuery.cache[id][name]; 
// If we've removed all the data, remove the element's cache 
name = ""; 
for (name in jQuery.cache[id]) 
break; 
if (!name) jQuery.removeData(elem); 
//★★★★★★★ 

// Otherwise, we want to remove all of the element's data 
} else { 
// Clean up the element expando 
try { 
delete elem[expando]; 
} catch(e) { 
// IE has trouble directly removing the expando 
// but it's ok with using removeAttribute 
if (elem.removeAttribute) elem.removeAttribute(expando); 

// Completely remove the data cache 
delete jQuery.cache[id]; 

},

留意星号包围的区域,John Resig的想法是,如果把元素节点的对应的缓存体的键值对全部移除后,就把此缓存体从cache中去掉。举个通俗的例子,cache就是一家银行,页面上的元素节点(elem)就是一个个人,每个人可以通过data方法在银行里开个帐户(id),而存折就是elem的那个expando属性,这个帐户可以做存许多东西,每样东西都分开管理的,如果帐户里面的东西都取光就会自动注销这个帐户。嗯,本来就应该这样,没用的东西就应该收CG回收掉,节省内存。

下面是一个仿制品

但如果jQuery与一些在Object原型进行了扩展的库共库呢?假设在它里面添加了个aa属性……

这时就无法清除缓存体了,遇到这篇文章提到的问题《Google Closure: 糟糕的JavaScript》,真是百密一疏!这也很好的教训了我们不要对Object.prototype这个最基本的东西做扩展,Prototype最近的版本也对此做了修正。那么如何排除干扰呢?


标签:jquery,缓存,数据
0
投稿

猜你喜欢

  • JS 中如何判断 null

    2007-12-13 20:28:00
  • 整理一个asp多级树型分类问题的解决方法

    2007-10-17 18:38:00
  • ASP自动解压RAR文件代码

    2007-11-06 13:29:00
  • 一个ASP站内搜索的实例源代码

    2007-09-21 12:13:00
  • 如何编制一个产生随机密码的函数?

    2009-11-08 19:06:00
  • Mootools常用方法扩展(三)

    2009-01-14 20:07:00
  • 如何Restore数据库备份文件?

    2009-11-02 20:20:00
  • 10个糟糕的IE Bug及其修复

    2010-05-13 16:26:00
  • MYSQL教程:表达式操作符和数据类型转换

    2009-02-27 15:51:00
  • JavaScript 组件之旅(四):测试 JavaScript 组件

    2009-10-13 20:32:00
  • 对用户研究实践的思考

    2010-10-19 12:21:00
  • asp连接mysql数据库详细实现代码

    2012-12-04 19:56:39
  • 带农历及节日的js日历源码

    2010-08-01 17:38:00
  • ASP模拟MVC模型的编程方式

    2008-10-15 14:51:00
  • ASP中查询数据库记录写入XML文件示例

    2007-08-23 13:12:00
  • CSS扫盲(一): padding

    2009-08-04 17:58:00
  • asp代码WinHttp.WinHttpRequest.5.1使用例子

    2010-03-11 21:28:00
  • SQL Server索引管理的六大铁律

    2009-03-25 14:05:00
  • 如何高效地访问记录集?

    2009-11-22 19:25:00
  • 如何使用图片精灵优化你的网站

    2009-07-21 11:35:00
  • asp之家 网络编程 m.aspxhome.com