`
y1d2y3xyz
  • 浏览: 257146 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jquery源码-jquery.extend()

阅读更多
源码291~353行,jQuery.extend函数(utils)

jQuery.extend()使用方式有三种:
1.jQuery.extend({...}),参数为一个对象,这种使用方式是把参数的值cp给jQuery对象,这是扩展jQuery最常用的方式,后面很多代码都采用这种方式。
2.jQuery.extend({...},{...}...),参数为多个对象,这种方式是把后面的多个对象的值cp给第一个对象,如果后面对象有和前面对象相同的属性,则后面的覆盖前面的。
3.jQuery.extend(true,{a:{h:22,w:333}},{a:{h:552,s:2532},c:287}),深度cp,递归合并、覆盖、复制的方式。返回结果为{a:{h:552,w:333,s:2532},c:287}


接下来看源码:

jQuery.extend = jQuery.fn.extend = function() {
	var options, name, src, copy, copyIsArray, clone,
		target = arguments[0] || {},//参数目标对象
		i = 1,
		length = arguments.length,//参数长度
		deep = false;//是否为深度复制

	// Handle a deep copy situation
    //如果为深度复制,则目标对象和原对象游标值i,以及深度值都进行更新
	if ( typeof target === "boolean" ) {
		deep = target;
		target = arguments[1] || {};
		// skip the boolean and the target
		i = 2;
	}

	// Handle case when target is a string or something (possible in deep copy)
    //当目标对象的值类型错误,则重置为{}
	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
		target = {};
	}

	// extend jQuery itself if only one argument is passed
    //当参数值长度为1的情况下,目标对象就为jQuery自身
	if ( length === i ) {
		target = this;
		--i;
	}

	for ( ; i < length; i++ ) {
		// Only deal with non-null/undefined values
		if ( (options = arguments[ i ]) != null ) {//忽略空对象
			// Extend the base object
			for ( name in options ) {
				src = target[ name ];
				copy = options[ name ];//存储对象的值

				// Prevent never-ending loop
				if ( target === copy ) {
					continue;
				}

				// Recurse if we're merging plain objects or arrays
                  //深度复制只有属性深度多于俩层的对象关系的结构的,如{a:{s:21,age:11}}或{a:['s'=>21,'age'=>11]}
				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 : {};
					}

					// Never move original objects, clone them
                    // 调用自身进行递归复制
					target[ name ] = jQuery.extend( deep, clone, copy );

				// Don't bring in undefined values
				} else if ( copy !== undefined ) {//非深度CP直接覆盖目标属性
					target[ name ] = copy;
				}
			}
		}
	}

	// Return the modified object
	return target;
};
分享到:
评论

相关推荐

    jquery-3.3.1.js/min.js

    jQuery 3.3.1还包含了一些实用工具方法,如`.each()`用于遍历集合,`.extend()`用于对象合并,`.trim()`用于字符串去空格,以及`.data()`用于在元素上存储和检索数据。 总结 jQuery 3.3.1作为一款成熟的JavaScript...

    jQuery.extend和jQuery.fn.extend的区别

    在jQuery的API中,`jQuery.extend`和`jQuery.fn.extend`是两个重要的方法,它们用于合并对象属性,但作用范围和用途有所不同。本文将深入探讨这两个方法的差异,并通过实例解析它们的工作原理。 首先,`jQuery....

    139.jQuery源码分析-魔术方法.rar

    《jQuery源码分析——魔术方法》 jQuery,作为一款广泛使用的JavaScript库,以其简洁的API和强大的功能赢得了开发者们的喜爱。在深入理解jQuery的工作原理时,我们常常会遇到一些“魔术方法”,这些方法在特定场景...

    jquery-ui-1.7.2.zip

    此外,jQuery UI 1.7.2 还支持事件处理和动画效果,通过$.fn.extend()方法扩展了jQuery的核心功能,使得开发者能够轻松地添加交互效果和响应式行为。例如,可以使用animate()函数实现平滑的过渡动画,或者利用事件...

    jQuery使用l-by-l.min.js插件实现键盘打出逐字逐句显示文字特效源码.zip

    本资源"jQuery使用l-by-l.min.js插件实现键盘打出逐字逐句显示文字特效源码.zip"提供了一个具体的应用示例,用于演示如何利用jQuery和一个名为l-by-l.min.js的插件来创建一种键盘打字效果,这种效果通常在网页设计中...

    jQuery-, jQuery源码解读 -- jQuery v1.10.2.zip

    《jQuery源码解读——深入理解jQuery v1.10.2》 jQuery,这个轻量级的JavaScript库,自2006年发布以来,以其简洁的API和强大的功能深受开发者喜爱,成为Web开发领域中不可或缺的一部分。本文将对jQuery v1.10.2的...

    Jquery-source-code.zip_code

    《jQuery源码解析:深入理解JavaScript库之精髓》 jQuery,作为一款广泛应用于Web开发的JavaScript库,以其简洁、易用的API深受开发者喜爱。它极大地简化了DOM操作、事件处理、动画效果以及Ajax交互等任务,使得...

    jquery-3.1.1.zip

    6. **插件生态**:jQuery拥有庞大的插件生态系统,开发者可以通过$.fn.extend()扩展功能,如jQuery UI提供了丰富的用户界面组件,jQuery Validation Plugin则用于表单验证。 7. **版本更新**:jQuery 3.x系列对旧的...

    jQuery-Word-Export-master.zip

    《jQuery Word Export 源码解析与应用》 在当今的Web开发中,将网页内容导出为Word文档是一项常见的需求。"jQuery-Word-Export-master.zip" 是一个专门用于实现这一功能的开源项目,它提供了简单易用的API,使得...

    jQuery-Source-code-analysis-.rar_code

    《jQuery源码分析》 jQuery,作为一款广泛应用于前端开发的JavaScript库,以其简洁的API、高效的DOM操作和丰富的插件系统,极大地提升了开发者的工作效率。深入理解jQuery的源码,不仅能帮助我们更好地运用它,还能...

    JQuery源码详细中文注释_Jquery源码分析_

    《jQuery源码深度解析》 jQuery,作为一款广泛使用的JavaScript库,因其简洁的API和强大的功能,深受开发者喜爱。本文将深入探讨jQuery 1.2.6版本的源码,结合其中的中文注释,帮助读者理解其内部机制,提升...

    jQuery-1.6.2.js+jQuery-1.4.2.js +笔记

    此外,还可以通过分析`each()`方法理解jQuery如何遍历元素集合,以及`extend()`方法如何实现对象的合并和深拷贝。 在实践过程中,编写小例子是提升技能的有效途径。比如,可以尝试实现一个简单的页面滚动动画,利用...

    jQueryAPI-100214.rar

    典型的插件结构包括`$.fn.extend()`来扩展jQuery对象,以及一个初始化函数用于设置插件的默认选项。 七、链式操作 jQuery的一大特色是链式操作,允许在一个句柄上连续调用多个方法。例如,`$("#element").css(...

    jQuery源码分析(1.7)

    ### jQuery源码分析关键知识点详解 #### 一、前言 在深入了解jQuery源码之前,有必要先简要介绍一下jQuery的基本情况及其对JavaScript编程领域的重要意义。jQuery作为一个轻量级、功能丰富的JavaScript库,在Web...

    jQuery源码分析-03构造jQuery对象

    ### jQuery源码分析—构造jQuery对象 #### 一、源码结构概览 根据所提供的文件内容,本节将深入分析如何构建jQuery对象及其核心构造逻辑。首先,让我们从整体上理解jQuery构造函数的设计思路。 ##### 总体结构 ...

    jquery_curriculum_new-KojuSakaguchi-源码.rar

    通过"$().fn.extend()",开发者可以创建自己的jQuery方法。源码可能包含自定义插件的实现,有助于学习如何编写和使用jQuery插件。 通过对"jquery_curriculum_new-KojuSakaguchi-源码.rar"的深入研究,我们可以系统...

    《锋利的JQuery》实例源码

    《锋利的jQuery》是一本深入讲解jQuery技术的书籍,其附带的实例源码是学习和理解jQuery核心概念及实际应用的重要参考资料。这个压缩包包含的文件是书中的各个章节实例的源代码,总共涵盖了8个章节的内容,未包括...

    jQuery.extend 函数详解

    通过这个方法,开发者可以在不修改原始jQuery源码的情况下,向jQuery添加新的功能。 #### 二、基本用法与原理 **1. 基本用法** `jQuery.extend`的基本用法如下: ```javascript jQuery.extend(destination, ...

    jQuery 1.4 源码以及chm文档

    三、jQuery源码解析 jQuery的源码结构清晰,主要分为选择器、DOM操作、事件处理、动画效果、AJAX等模块。其中,`jQuery.fn`(即`jQuery.prototype`)包含了大部分方法,如`$(...)`构造函数、`each()`遍历方法等。...

    jQuery fDialog v1.0.1-源码.zip

    1. **jQuery插件结构**:fDialog的源码将遵循jQuery插件的一般模式,即在`$.fn.extend`方法中定义新的函数,使得我们可以像使用jQuery方法一样调用fDialog。 2. **对话框元素构造**:对话框通常包含标题、内容、...

Global site tag (gtag.js) - Google Analytics