jQuery2.0.3源码学习---继承方法

Posted onepieceking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jQuery2.0.3源码学习---继承方法相关的知识,希望对你有一定的参考价值。

  jQuery中的extend()方法主要有三种用法:

// 扩展插件 调用方法:$.a()
$.extend(
    a : function
        alert(1)
    
)  
// 合并对象到第一个
$.extend(a,name:‘nick‘,age:‘30‘)
//拷贝
 var a = ; 
 var b = nage: ‘nick‘
$.extend(a, b) //浅拷贝
$.extend(true,a, b) //浅拷贝

  其源码部分如下所示:

jQuery.extend = jQuery.fn.extend = function() 
    var options, name, src, copy, copyIsArray, clone,
        target = arguments[0] || , //参数列表的第一个  即目标值
        i = 1,
        length = arguments.length,
        deep = false;  //深拷贝与浅拷贝 默认时浅拷贝
    if ( typeof target === "boolean" )   //判断是否拷贝,更换目标值
        deep = target;
        target = arguments[1] || ;
        i = 2;
    
    if ( typeof target !== "object" && !jQuery.isFunction(target) )  //判断参数是否正确
        target = ;
    
    if ( length === i )   //参数只有一个对象,表明插件调用
        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; //防止循环引用 如果target和copy的值相等,就会导致一致循环下去
                
                if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) )  //deep为真 深拷贝
                    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.extend = jQuery.fn.extend = function()...,jQuery是一个函数,把一个方法添加到函数下面,叫做扩展静态方法,jQuery.fn是jQuery.prototyped的一个引用,也就是jQuery的原型,把方法添加到原型下面叫做扩展实例方法。这样在调用扩展静态方法时直接$.fn()就可以了,而调用实例方法需要$().fn()。随后源码又定义了一些变量,代码的注释里已经写明了变量的含义。接着又开始判断目标值是否为布尔值,如果为布尔值,就表明需要进行拷贝,把目标值换为第二个参数。

  至于深拷贝与浅拷贝  明天在学习下。

 

以上是关于jQuery2.0.3源码学习---继承方法的主要内容,如果未能解决你的问题,请参考以下文章

jQuery源码架构

jquery源码之通篇概要

jquery源码 Callback

Concurrent包学习之 BlockingQueue源码学习

JQuery源码分析 --- 运动animate 基本原理

Spring源码学习之BeanFactory体系结构