将函数附加到jQuery对象的不良做法?

时间:2009-10-19 07:50:02

标签: jquery namespaces

目前我有一个jQuery插件,它不仅在$.fn中设置其功能,还在$本身设置其功能,检查if (typeof(this) == 'function')以查看是否已通过$.pluginname调用它或$(elm).pluginname ...这是一种不好的做法,如果是这样,有没有更好的方法来提供元素可选?

2 个答案:

答案 0 :(得分:2)

您是否阅读了jquery authoring文档?示例中的log函数被认为是为开发人员向jquery对象添加函数的标准方法。

答案 1 :(得分:1)

jquery扩展函数在两个名称空间中公开:

jQuery源将两者定义为:

$.extend = $.fn.extend = ...

这会让我相信他们打算让你能够做到这一点。但是,如果你看一下jQuery作者设置自己的函数来使用它们的方式,你可以更好地了解最佳实践。

例如,您通常需要$ .fn函数来调用$函数。 (很像jQuery源代码中的$ .data函数)

$.extend({
  data: function(elem, key, value) {...}
});

和(稍微简化):

$.fn.extend({
  data: function(key, value){
    return this.each(function(){
      $.data(this, key, value);
    };
  }
});

这样,一个调用另一个并负责检查你正在使用哪个版本,如果你愿意,你可以在$ namespace中检查一个未定义的'elem'参数。