谁能告诉我这两种扩展函数有什么区别?谢谢。
$.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;
}
// [...]
};