有或没有extend关键字的jquery

时间:2013-02-27 14:23:56

标签: jquery

谁能告诉我这两种扩展功能有什么区别?感谢。

$.fn.alertWhileClick= function() {
   alert($(this).val());
}


$.fn.extend({
    alertWhileClick:function(){
      alert($(this).val());
    }
});  

1 个答案:

答案 0 :(得分:1)

这两种形式是等价的。第一个通过赋值为jQuery的原型添加一个方法,第二个通过调用$.fn.extend()来实现,这与$.extend()的方法相同。

文档实际上有点误导,因为它说:

  

如果只向$.extend()提供了一个参数,则表示目标   参数被省略了。在这种情况下,jQuery对象本身就是   被认为是目标。

但实际发生的事情更像是:

  

如果只向$.extend()提供了一个参数,则表示目标   参数被省略了。在这种情况下,对象$.extend()应用于(即方法中绑定到this的对象)是   被认为是目标。

因此,使用单个参数调用$.extend()扩展$,并使用单个参数调用$.fn.extend()扩展$.fn

源代码的相关部分说:

jQuery.extend = jQuery.fn.extend = function() {

    // [...]

    // extend jQuery itself if only one argument is passed
    if ( length === i ) {
        target = this;  // Note: 'this', not 'jQuery'.
        --i;
    }

    // [...]
};