Jquery有或没有扩展关键字



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

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

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

这两种形式是等价的。第一个通过赋值将一个方法添加到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;
    }
    // [...]
};

最新更新