2014-03-06 118 views
0

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

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

,而不仅仅是分配属性插件对象实例:

this.playing = true; 

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

回答

3

根据docs,它避免了循环引用的内存泄漏。

另外,.data()不会与HTMLElement的现有方法和属性冲突,这是更有前途的证明。


通过面向未来的,我的意思是,一个简单的例子是存储在其playing财产audio/video元素的显示状态,你的代码的作品,一切都很好。明天,WHATWG决定将playing属性添加到HTMLMediaElementDOM界面和繁荣!您的代码中断或意想不到的副作用。

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

另一个例子是被设置value财产 - 你有span测试它,它工作正常,那么你船的代码,另一个开发人员试图调用一个输入元素上的插件,它会与value的冲突输入。 $.data很容易避免这种问题。

谈到将元数据存储在DOM元素的自定义属性中的一般含义时,未来冲突的可能性总是很小。即使赔率往往非常低,但感觉更多的未来证明并且没有什么可担心的事情是很好的。

相关问题