首页 > 代码库 > jquery extend源码解析

jquery extend源码解析

		$.extend(obj1,0bj2,{"name":"s","age":22})		//target  要拷贝到哪个对象上		// i  要执行拷贝的次数		// length  要拷贝的参数的长度		// name 对象参数中属性值		// options 对象参数		// clone 深度拷贝时重名对象属性的拷贝		// target 要拓展的对象				jQuery.extend = jQuery.fn.extend = function() {	    var src, copyIsArray, copy, name, options, clone,	        target = arguments[0] || {},    // 常见用法 jQuery.extend( obj1, obj2 ),此时,target为arguments[0]	        i = 1,	        length = arguments.length,	        deep = false;	    // Handle a deep copy situation	    if ( typeof target === "boolean" ) {    // 如果第一个参数为true,即 jQuery.extend( true, obj1, obj2 ); 的情况	        deep = target;  // 此时target是true	        target = arguments[1] || {};    // target改为 obj1	        // skip the boolean and the target	        i = 2;	    }	    // 以上处理:如果第一个参数是boolean,第二个参数是target。	    // Handle case when target is a string or something (possible in deep copy)	    if ( typeof target !== "object" && !jQuery.isFunction(target) ) {  // 如果target不是一个对象,设置默认对象。	        target = {};	    }	    // extend jQuery itself if only one argument is passed	    if ( length === i ) {   // 处理这种情况 jQuery.extend(obj),或 jQuery.fn.extend( obj )	        target = this;  // jQuery.extend时,this指的是jQuery;jQuery.fn.extend时,this指的是jQuery.fn	        --i;	    }	    for ( ; i < length; i++ ) {	        // Only deal with non-null/undefined values	        if ( (options = arguments[i]) != null ) { // 比如 jQuery.extend( , obj2, obj3, ojb4 ),options则为 obj2、obj3...	            // Extend the base object	            for ( name in options ) {	                src = http://www.mamicode.com/target[ name ];"name1":x});如果  如果target和option[name1]的值一样,会循环迭代。	                //看网上还有说应该要用src和copy比较的,$.extend({"name1":"张三","age":"14"},{"name1":"李四","age":"14"}),这两个可以进行操作的。	                    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 {    //被拷贝的属性值是个plainObject,比如{ nick: ‘casper‘ }	                        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 ) {  // 浅拷贝,且属性值不为undefined	                    target[ name ] = copy;	                }	            }	        }	    }	    // Return the modified object	    return target;	{		name1:"sdasd",		"name2":{				name1:"sdasd",				"name2":{					name1:"sdasd",					"name2":{							name1:"sdasd",							"name2":{								name1:"sdasd",								"name2":{										name1:"sdasd",										"name2":{											name1:"sdasd",											"name2":{													name1:"sdasd",													"name2":													}												}										}									}							}						}				}	}

  

jquery extend源码解析