重点掌握以下这些方法(可以手写代码):

1.深复制与浅复制 

jQuery.extend

2.类型判断相关方法

jQuery.type,jQuery.isFunction,jQuery.isArray,jQuery.isWindow,jQuery.isNumberic,jQuery.isPlainObject,jQuery.isArrayLike

3.数组相关方法

jQuery.each,jQuery.map,jQuery.grep

4.转驼峰的实现

jQuery.camelCase

一、jQuery.extend/jQuery.fn.extend 

 

    //可接受的参数类型如下:jQuery.extend([deep],target,object1,[objectN])
    jQuery.extend = jQuery.fn.extend = function() {
        var target = arguments[0] || {}, //指向目标对象
            deep = false, //是否进行深度复制
            i = 1, //表示源对象的起始下标
            length = arguments.length, //表示参数个数;
            options, name, src, copy, copyIsArray; //options指向某个源对象,name指向源对象的某个属性名,src目标对象某个属性的原始值,copy某个源对象的某个属性的值,copyIsArray指示变量copy是否为数组        
        //首先进行参数修正
        if (typeof target === 'boolean') {
            deep = target;
            target = arguments[1] || {};
            i = 2;
        }
        //此时target就是jQuery或jQuery.fn
        if (i === length) {
            target = this;
            i--;
        }
        //处理target是字符串或者其他情形,这在深度复制中可能出现
        // if(typeof target!=='object'||!jQuery.isFunction(target)){
        //     target={};
        // }
        for (i; i < length; i++) {
            options = arguments[i];
            for (name in options) {
                src = target[name];
                copy = options[name];
                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 : {};
                    }
                    //递归调用
                    target[name] = jQuery.extend(deep, clone, copy);
                } else {
                    target[name] = copy;
                }
            }
        }
        return target;
    };
jQuery.extend

相关文章: