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"});
  • 相关阅读:
    js中取整数的方法
    js中原型和原型链
    js中获取class封装
    Cocos2dx打包成apk包时在手机上闪退
    计算两个日期间相差的天数
    Stealing a Cake [函数方程符合凸性 三分]
    插件式架构设计(转)
    转:Entity FrameWork利用Database.SqlQuery<T>执行存储过程并返回参数
    后台web请求代码(含https,json提交)
    sitecore 缓存管理器
  • 原文地址:https://www.cnblogs.com/clearfix/p/4186576.html
Copyright © 2011-2022 走看看