我注意到很多 jQuery 插件开发人员使用 $.data 函数来存储某种动作的状态。
$.data(this, 'playing', true);
而不是仅仅为插件对象实例分配一个属性:
this.playing = true;
这是怎么回事?使用 $.data 有什么好处吗?
我注意到很多 jQuery 插件开发人员使用 $.data 函数来存储某种动作的状态。
$.data(this, 'playing', true);
而不是仅仅为插件对象实例分配一个属性:
this.playing = true;
这是怎么回事?使用 $.data 有什么好处吗?
根据文档,它通过循环引用避免了内存泄漏。
此外,.data()
与 的现有方法和属性不冲突HTMLElement
,更具前瞻性。
通过未来的证明,我的意思是,一个简单的示例是将audio
/video
元素的播放状态存储在其playing
属性中,您的代码可以正常工作,一切都很好。然后明天,WHATWG 决定在DOM 接口中添加一个playing
属性,然后就大功告成了!HTMLMediaElement
您的代码中断或有意外的副作用。
这当然只是一个愚蠢的例子来说明未来冲突的可能性,在上面的用例中,您通常只需读取paused
元素的属性。
另一个例子是设置value
属性——你用 a 测试它span
并且它工作正常,然后你发送代码并且另一个开发人员尝试在输入元素上调用插件,它会与value
输入冲突。这种问题很容易避免$.data
。
从广义上讲,将元数据存储在 DOM 元素的自定义属性中,将来发生冲突的可能性总是很小。尽管几率通常很低,但能感受到更多的未来证明并少担心一件事是件好事。