JQuery.extend函数使用详解 $.extend

                  jQuery为开发插件提供了两个方法,分别是:jquery

                            1. jQuery.fn.extend():给jQuery对象提供方法。函数

                            2. jQuery.extend():为扩展jQuery类自己添加方法。oop

     先看源码是怎么实现的,截取自JQuery-1.11.0,不想看,能够直接越过。。this

源码截取出来了,中文地方为我加的说明spa

jQuery.extend = jQuery.fn.extend = function() {
var src, copyIsArray, copy, name, options, clone,

//target初始化为取第一个参数 OR {},
target = arguments[0] || {},
i = 1,
length = arguments.length,
deep = false;
//这里的判断target是否为boolean,引伸extend方法的另种形式 extend(boolean,dest,src1,src2,src3...)。
// Handle a deep copy situation
if ( typeof target === "boolean" ) {
deep = target;
// skip the boolean and the target 看不懂么?越过第一个boolean把target设置为第二个参数,i++...
target = arguments[ i ] || {};
i++;
}

// Handle case when target is a string or something (possible in deep copy) 
//target类型判断,类型不对,就初始化为{}
if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
target = {};
}

// extend jQuery itself if only one argument is passed
//就里引伸为另外一个方法extend(src),只有一个参数。
if ( i === length ) {
target = this;
i--;
}
for ( ; i < length; i++ ) {
// Only deal with non-null/undefined values
if ( (options = arguments[ i ]) != null ) {
// Extend the base object
for ( name in options ) {
src = target[ name ];
copy = options[ name ];
// Prevent never-ending loop
if ( target === copy ) {
continue;
}
// Recurse if we're merging plain objects or arrays
if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
if ( copyIsArray ) {
copyIsArray = false;
clone = src && jQuery.isArray(src) ? src : [];
} else {
clone = src && jQuery.isPlainObject(src) ? src : {};
}
// Never move original objects, clone them
target[ name ] = jQuery.extend( deep, clone, copy );
// Don't bring in undefined values
} else if ( copy !== undefined ) {
target[ name ] = copy;
}
}
}
}
// Return the modified object
return target;
};

 从源码中能够看出插件

1.jQuery.extend和jQuery.fn.extend是同一个方法,可是具体的做用却不同。由于在调用jQuery.extend 和jQuery.fn.extend 函数时,函数内部this是不一样的,jQuery.extend()内this固然是jQuery,而jQuery.fn.extend固然是jQuery.fn,这样jQuery.extend()为扩展jQuery类自己.为类添加新的方法。jQuery.fn.extend()是给jQuery对象添加方法。 code

2. extend(src):将src对象的属性和方法逐一复制给jQuery或jQuery对象 对象

例如:继承

$.extend({
  hello:function(){alert('hello Josean');}
  });
  //就是将hello方法合并到jquery的全局对象中

同理ip

 $.fn.extend({
  hello:function(){alert();}
 });
 //就是将hello方法合并到jquery的实例对象中。

3. extend(dest, src1, src2, src3..srcN):将src1, src2…对象的属性和方法逐一复制给dest

对象。需注意的是,在复制的过程当中,排在后面的参数(对象)将会覆盖排在前面的参数和属性的方法。

dest对象数据就会生改变,若是不想改dest刚传‘{}’

例如:

var result=$.extend({},{name:"test1",age:21},{name:"test2",sex:"man"})
//结果:
 result={name:"test2",age:21,sex:"man"}

4. extend(boolean, dest, src1,src2…):jQuery的extend方法提供了“深层拷贝”的功能,若是传入第一个参数为boolean型变量,则该变量为深层拷贝的标志,第二个参数为extend方法的目标对象,其他参数为须要进行继承的“父类”。若是第一个参数的值为true(深度拷贝),而且dest和src元素都包括相同名称的对象属性,则对该对象的属性和方法再进行一次复制。  

var result=$.extend( ,  {},  
    { name: John, location: {city: Beijing,county:China} },  
    { last: Resig, location: {state:MA ,county:USA} } ); 
 //结果
 result={name:"John",last:"Resig",
        location:{city:"Beijing",state:"MA",county:"USA"}}

后面都是以$.extend为例子,你们能够试试$.fn.extend试一下哈

文章属于自已原创,转载请说明。

参考了百度  ^_^

相关文章
相关标签/搜索