【问题标题】:Why use $.data instead of assigning properties to "this"?为什么使用 $.data 而不是将属性分配给“this”?
【发布时间】:2014-03-06 22:11:40
【问题描述】:

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

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

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

this.playing = true;

这里有什么问题?使用 $.data 有什么好处吗?

【问题讨论】:

    标签: javascript jquery oop jquery-plugins jquery-data


    【解决方案1】:

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

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


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

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

    另一个例子是设置value 属性——你用span 对其进行测试并且它工作正常,然后你发送代码并且另一个开发人员尝试在输入元素上调用插件,它会与输入的value。使用$.data 可以轻松避免此类问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      • 2011-12-20
      相关资源
      最近更新 更多