zoukankan      html  css  js  c++  java
  • 详细解析extend函数

    1.感觉水很深啊

    function jQuery(){
    
    }
    jQuery.extend = jQuery.prototype.extend = function() {
        var src, copyIsArray, copy, name, options, clone,
        //如果没有参数target = {} ; 有的话 target为第一个参数;
    
        target = arguments[ 0 ] || {},
    
        //索引i置为1;
        i = 1;
    
        length = arguments.length,
        deep = false;
        //如果第一个参数为一个boolean的值,将其赋值给deep,然后继续遍历 arguments
        if( typeof target == 'boolean'){
            deep = target;
            target = arguments[ i ] || {};
            ++i;
        }
    
        //
        if( typeof targer !== 'object' && !jQuery.isFunction( target )){
            target = {};
        }
    
        //当只有一个参数将this 赋值给 jQuery或者jQuery.fn赋值给target,取决于使用者调用的方式;这里有两个分支;如果此参数为
       //boolean时,此时无法进入循环,直接将target return出去;如果此参数不为
        if( i == length ){
            target = this;
            --i;
        }
    
        for( ; i < length; i++ ){
            if( ( options = arguments[i] ) != null ){
                for( name in options ){
                    src = target[ name ];
                    copy = options[ name ];
    
                    if( target == copy){
                        continue;
                    }
    
                    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 if( copy != undefined ){
                        target[ name ] = copy;
                    }
                }
            }
        }
    
        return target;
    };
    
    jQuery.isFunction = function( obj ){
        return Object.prototype.toString.call( obj ).slice( 8, -1 ).toLowerCase() =='function';
    }
    jQuery.extend({},{"1":true, "2": "false"});
  • 相关阅读:
    解析Javascript事件冒泡机制(转)
    JavaScript事件处理的三种方式(转)
    javaScript中"=="和"==="运算符的区别
    博客
    基础知识巩固二
    基础知识巩固
    知识小结(浮点数问题)
    关于电脑桌面图标消失并且右键无法点击的情况
    JS随笔(二)
    关于JS学习笔记
  • 原文地址:https://www.cnblogs.com/clearfix/p/4186576.html
Copyright © 2011-2022 走看看