【发布时间】:2014-03-06 22:11:40
【问题描述】:
我注意到很多 jQuery 插件开发者使用 $.data 函数来存储某种动作的状态。
$.data(this, 'playing', true);
而不仅仅是为插件对象实例分配一个属性:
this.playing = true;
这里有什么问题?使用 $.data 有什么好处吗?
【问题讨论】:
标签: javascript jquery oop jquery-plugins jquery-data
我注意到很多 jQuery 插件开发者使用 $.data 函数来存储某种动作的状态。
$.data(this, 'playing', true);
而不仅仅是为插件对象实例分配一个属性:
this.playing = true;
这里有什么问题?使用 $.data 有什么好处吗?
【问题讨论】:
标签: javascript jquery oop jquery-plugins jquery-data
根据docs,它通过循环引用避免了内存泄漏。
另外,.data() 与HTMLElement 的现有方法和属性不冲突,更具前瞻性。
通过未来证明,我的意思是,一个简单的示例是将audio/video 元素的播放状态存储在其playing 属性中,您的代码可以正常工作并且一切正常。然后明天,WHATWG 决定在HTMLMediaElement DOM 接口中添加一个playing 属性,然后繁荣!您的代码中断或有意外的副作用。
这当然只是一个愚蠢的例子来说明未来冲突的可能性,在上面的用例中,您通常只需阅读元素的 paused 属性。
另一个例子是设置value 属性——你用span 对其进行测试并且它工作正常,然后你发送代码并且另一个开发人员尝试在输入元素上调用插件,它会与输入的value。使用$.data 可以轻松避免此类问题。
从广义上讲,将元数据存储在 DOM 元素的自定义属性中,将来发生冲突的可能性总是很小。尽管几率通常很低,但能感受到更多的未来证明并少担心一件事是件好事。
【讨论】: