我注意到很多jQuery插件开发人员使用$ .data函数来存储某种类型操作的状态。
$.data(this, 'playing', true);
而不是仅仅为插件对象实例分配属性:
this.playing = true;
这是什么交易?使用$ .data有什么好处吗?
答案 0 :(得分:3)
根据docs,它通过循环引用避免了内存泄漏。
此外,.data()
与HTMLElement
的现有方法和属性不冲突,更具未来性。
通过未来的证明,我的意思是,一个简单的例子是将audio
/ video
元素的播放状态存储在其playing
属性中,您的代码可以正常运行。然后明天,WHATWG决定将playing
属性添加到HTMLMediaElement
DOM界面并繁荣!您的代码中断或有意想不到的副作用。
这当然只是一个愚蠢的例子来说明未来冲突的可能性,在上面的用例中你通常只读取元素的paused
属性。
另一个示例是设置value
属性 - 您使用span
进行测试并且工作正常,然后您发送代码,另一个开发人员尝试在输入元素上调用插件,它会与输入的value
冲突。使用$.data
可以轻松避免此类问题。
在将元数据存储在DOM元素的自定义属性中的一般意义上讲,未来冲突的概率很小。虽然赔率通常非常低,但是感觉更有前途的证据并且少担心一件事情是很好的。