2

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

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


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

1 回答 1

1

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

该文档实际上在这里有点误导,因为它说:

如果仅向 提供一个参数$.extend(),则意味着省略了目标参数。在这种情况下,jQuery 对象本身被假定为目标。

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

如果仅向 提供一个参数$.extend(),则意味着省略了目标参数。在这种情况下,应用对象$.extend()(即this方法内绑定的对象)被假定为目标。

因此,$.extend()使用单个参数$调用 extends ,并$.fn.extend()使用单个参数调用 extends $.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;
    }

    // [...]
};
于 2013-02-27T14:43:01.073 回答