编写jquery插件和“$ .something”构造

时间:2011-08-03 08:58:33

标签: jquery

目前我正在研究一个jquery插件并查看其他插件代码,我发现了一种通常的方式来编写它通过一个对象,有点像:

$.fn.myplugin = function(method){
    //... some code
    object = new $.myobject(param);
    //... other code

    // myobject definition
    $.myobject = function(param){
        //.... my object code
    }
} 

我无法理解$ .myobject定义的工作原理以及许多开发人员使用它来定义插件的原因。

如果可能的话,你能提供一些信息和教程/文件链接吗?

3 个答案:

答案 0 :(得分:1)

在运行时向javascript对象添加属性的能力使每个javascript对象成为'expando'对象。

这里有一个解释

Stack overflow question on javascript expando objects

希望这会有所帮助:)

答案 1 :(得分:1)

jQuery的真正威力在于能够轻松快速地选择和操作 DOM元素。幸运的是,我们可以通过添加我们的包装方法来扩展这种功能 拥有我们认为适当的操纵选定的DOM元素。通过添加wrap-per方法,我们可以自动使用强大的jQuery选择器进行选择 并选择要操作哪些元素而无需完成所有工作 我们自己。
 鉴于我们对JavaScript的了解,我们可能已经想到了我们的 拥有如何将实用程序函数添加到$ namespace,但这不一定正确 包装函数。我们需要一些特定于jQuery的信息 知道:要为jQuery添加包装器方法,我们必须将它们作为属性分配给 $ namespace中名为fn的对象。  创建包装函数的一般模式是

$.fn.wrapperFunctionName = function(params){function-body};

让我们编写一个简单的包装器方法来设置匹配的DOM元素的颜色 蓝色:

(function($){
  $.fn.makeItBlue = function() {
    return this.css('color','blue');
  };
})(jQuery);

http://www.manning.com/bibeault2/

答案 2 :(得分:0)

我认为这只是避免污染全球范围的众多方法之一。开发人员将他们的插件作为jQuery本身的属性,通过window.myPlugin

使其无法使用

或者他们更喜欢建筑

$.tooltip(someObjects, "text")

$(someObjects).tooltip("text")

或者想要采用两者。

然而,作为一种避免代码污染的方法,我建议使用自调用函数,而不是使用无意义的包装器来扩展jQuery。

(function($) {
  // put here any variables or functions you need
  // they will stay within the self invoking function scope

  function setup(element) {
    // add extra features to the matched element
  }

  $.fn.tooltip = function() {
    return this.each(function(index, element) {
      setup(element);
    });
  }
})(jQuery);

如果您提出问题,可以在我的一篇文章中read more