0

我注意到很多 jQuery 插件开发人员使用 $.data 函数来存储某种动作的状态。

$.data(this, 'playing', true);

而不是仅仅为插件对象实例分配一个属性:

this.playing = true;

这是怎么回事?使用 $.data 有什么好处吗?

4

1 回答 1

3

根据文档,它通过循环引用避免了内存泄漏。

此外,.data()与 的现有方法和属性不冲突HTMLElement,更具前瞻性。


通过未来的证明,我的意思是,一个简单的示例是将audio/video元素的播放状态存储在其playing属性中,您的代码可以正常工作,一切都很好。然后明天,WHATWG 决定在DOM 接口中添加一个playing属性,然后就大功告成了!HTMLMediaElement您的代码中断或有意外的副作用。

这当然只是一个愚蠢的例子来说明未来冲突的可能性,在上面的用例中,您通常只需读取paused元素的属性。

另一个例子是设置value属性——你用 a 测试它span并且它工作正常,然后你发送代码并且另一个开发人员尝试在输入元素上调用插件,它会与value输入冲突。这种问题很容易避免$.data

从广义上讲,将元数据存储在 DOM 元素的自定义属性中,将来发生冲突的可能性总是很小。尽管几率通常很低,但能感受到更多的未来证明并少担心一件事是件好事。

于 2014-03-06T22:15:48.957 回答