理解jQuery $.extend与$.fn.extend

这两个方法一直都觉得挺难理解的,但是今天写程序时发现这两个方法的区别就在于$.extend是作用于一个object的静态方法(static method),而$.fn.extend是在作用于prototype的一个实例方法(instance method)。

构造jQuery时会实例化一个对象

// Define a local copy of jQuery
var jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
},

对于$.extend相当于对jQuery Object自身进行扩展。查看源码

...
} else if ( copy !== undefined ) {
target[ name ] = copy;
}
...

而$.fn.extend相当于对jQuery prototype进行扩展。查看源码

jQuery.fn = jQuery.prototype = {
...

所以这样就很清晰了,对jQuery添加全局函数时使用$.extend,而对于插件侧使用$.fn.extend

此条目发表在 javascript, 实验室 分类目录,贴了 , 标签。将固定链接加入收藏夹。