加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

jQuery.data( )要领与内存走漏

发布时间:2018-09-02 16:25:54 所属栏目:业界 来源:站长网
导读:在 jQuery 的官方文档中,提醒用户这是一个初级的要领,应该用.data()要领来取代。$.data( element, key, value )可以对DOM元素附加任何范例的数据,但应停止轮回引用而导致的内存走漏题目,原文如下: The jQuery.data() method allows us to attach data

jQuery的官方文档中,提醒用户这是一个初级的要领,应该用.data()要领来取代。$.data( element, key, value )可以对DOM元素附加任何范例的数据,但应停止轮回引用而导致的内存走漏题目,原文如下:

The jQuery.data() method allows us to attach data of any type to DOM elements in a way that is safe from circular references and therefore from memory leaks. We can set several distinct values for a single element and retrieve them later:

但对付该要领,存在的题目也不只于此。在JQUERY FORUM中 ,对该题目作了深入的接头,robert.katic 提出了一条办理方案。$.data()要领应用到宿主工具上,运行会获得优化,但在当地对像上行使该要领,功效未必尽如人意。一个元素在正常环境下可以行使.remove()要领将其删除,并破除各自的数据。但对付当地工具而言,这是不能彻底删除的,这些相干的数据一向一连到窗口工具封锁。同样,这些题目也存在于event 工具中,由于变乱处理赏罚器(handlers)也是用该要领来存储的。

那么,要办理该题目最简朴的要领是将数据存储到当地工具新增的一个属性之中。即:

// ...
if ( elem.nodeType ) {
cache[ id ] = dataObject;
elem[ expando ] = id;
} else {
elem[ expando ] = dataObject;
}
// ...

可是,一旦涉及到担任题目,该要领就无能为力。试看:

var parent = {};
var childA = Object.create( parent );
var childB = Object.create( parent );

$.data( parent, "foo", "parent value" );

// This may even be intentional
$.data( childA, "foo" ) // => "parent value"
$.data( childB, "foo" ) // => "parent value"

// This may NOT be intentional
$.data( childA, "foo", "childA value" );
$.data( parent, "foo" ) // => "childA value"
$.data( childB, "foo" ) // => "childA value"

开始时,存储数据的工具不存在,因此建设一个工具来存储新的值,如图

jQuery.data( )要领与内存走漏

此刻,我们实行去修改工具childA同样的数据。

jQuery.data( )要领与内存走漏

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读