是否从2.x弃用了jQuery $ .cache?

时间:2016-04-26 00:13:10

标签: jquery

当我尝试将$ .cache的值打印到控制台时,我得到了未定义。我搜索过并且找不到这个被弃用的记录吗?

我找到了这段代码:



$("button").click( function() {
    $("#target")[0].innerHTML = "";
    $("<div>").appendTo( $("#target")).click( $.noop );
    $("#log").text( Object.keys( $.cache ).length );
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<button>leak</button>
<div id="target"></div>
<pre id="log"></pre>
&#13;
&#13;
&#13;

如果你将jquery提高到1.12以上它就不再有效了,所以我怀疑它已被弃用了。

是否有类似的东西我可以打印所有缓存的jquery对象的值?

1 个答案:

答案 0 :(得分:2)

在较旧的jQuery版本中,有一个对象jQuery.cache。它用于内部目的,其中jQuery存储与特定DOM节点相关的数据,例如:

$(selector).data("foo", "whatever");

将存储数据。它没有公开文档,也不打算直接使用。

事实上,在jQuery源代码中,您可以看到使用$.data()的{​​{1}}次调用internalData()

在较新的jQuery版本(2.x及更高版本)中,jQuery使用两个名为jQuery.cachedata_user的内部数据对象来存储这种类型的状态,这些对象是私有的,不能通过data_priv

看起来(虽然我没有跟踪要验证的实际源代码控制版本历史记录)此架构从版本2.x开始更改。

  

jQuery $ .cache是​​否已弃用2.x?

是的,它似乎已从2.x及更高版本中删除,并替换为私有内部数据结构。

  

是否有类似的东西我可以打印所有缓存的值   jquery对象?

不是我知道的。请记住,它实际上不是DOM对象或jQuery对象的缓存,而是与DOM对象相关的私有数据存储。

如果你能描述一下你真正试图解决的问题,我们可以帮助你更好地找到解决问题的方法。

仅供参考,jQuery 2.1源代码有此评论,它有点描述了改变架构的动机:

jQuery.cache

最后一个可能解释了为什么他们想在这里隐藏实现细节,因为最终他们想要改变实现以使用/* Implementation Summary 1. Enforce API surface and semantic compatibility with 1.9.x branch 2. Improve the module's maintainability by reducing the storage paths to a single mechanism. 3. Use the same single mechanism to support "private" and "user" data. 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 5. Avoid exposing implementation details on user objects (eg. expando properties) 6. Provide a clear path for implementation upgrade to WeakMap in 2014 */ ,这将在内部工作不同,因此他们不希望任何人编码到他们当前的内部数据结构。