`
linleizi
  • 浏览: 229070 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

jQuery.extend() or $.extend()方法详解

 
阅读更多

jQuery目前是我们用到的前端比较流行的框架之一,有时候我们会在此基础上扩展一些方法,所以经常会用到extend方法,接下来一起了解下。

 

1. 首先看下jQuery的extend方法源代码

 

jQuery.extend = jQuery.fn.extend = function() {
	var src, copyIsArray, copy, name, options, clone,
		target = arguments[0] || {},
		i = 1,
		length = arguments.length,
		deep = false;

	// Handle a deep copy situation
	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
	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
				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 ) {
					target[ name ] = copy;
				}
			}
		}
	}

	// Return the modified object
	return target;
};

 

 

2. 由上述源代码,我们很容易看出extend方法扩展原型

 

  • $.extend(param, param1, param2, param3, param4...... )

含义是将【param1, param2, param3, param4......】合并到【param】,显然合并后【param】的结构会发生变化,如果不想【param】的结构发生变化,参照如下方式:

var param=$.extend({}, param1, param2, param3, param4......); //也就是将"{}"作为param参数。

 

  • $.extend(boolean, param, param1, param2, param3, param4...... )

第一个参数代表是否进行深度拷贝,其它参数和上面一样。

 

  • $.extend(param)

将param合并到jQuery的全局对象中。

 

3. Example

// 第一种情况
var result = $.extend({"name": "Jhon", "age": "20"}, {"name": "LiSha", "sex": "F"}, {"address": "American", "phone": "03-05555"});
result = {"address": "American", "age": "20", "name": "LiSha", "phone": "03-05555", "sex": "F"};
// 注意: 如果两个对象存在相同名的参数,后边的值会覆盖前边的值(ex: name)


// 第二种情况
var result = $.extend({}, {"name": "Jhon", "age": "20"}, {"name": "LiSha", "sex": "F"}, {"address": "American", "phone": "03-05555"});
result = {"address": "American", "age": "20", "name": "LiSha", "phone": "03-05555", "sex": "F"};

// 第三种情况
var result = $.extend(true, {}, 
				{"name": "Jhon", "age": "20", "address": {"country": "China", "town": "YuJi"}}, 
				{"name": "LiSha", "address": {"country": "American", "city": "New York"}});
result={"address": { "country" :"American", "town": "YuJi", "city": "New York"}, "age": "20", "name": "LiSha"};

// 第四种情况
var result = $.extend(false, {}, 
				{"name": "Jhon", "age": "20", "address": {"country": "China", "town": "YuJi"}}, 
				{"name": "LiSha", "address": {"country": "American", "city": "New York"}});
result = {"address": { "country":"American", "city": "New York"}, "age": "20", "name": "LiSha"};

// 第五种情况
var result = $.extend({"aaaaa": "Jhon", "age": "20"});
// 返回jQuery对象,并且将参数添加到对象里
/** jQuery对象一部分
jQuery function(e, t){
"aaaaa":"Jhon",
"age": "20"
}
*/



 

 

分享到:
评论

相关推荐

    jQuery.extend 函数详解

    上述代码将`hello`方法添加到了jQuery全局对象`$`中,可以通过`$.hello()`来调用它。 **2. 合并到jQuery实例对象** ```javascript $.fn.extend({ hello: function() { alert('Hello'); } }); ``` 这行代码将`...

    jQuery:jQuery.extend函数详解

    除了扩展静态方法之外,还可以使用`$.fn.extend`向每个jQuery实例对象中添加方法: ```javascript $.fn.extend({ hello: function () { alert('Hello!'); } }); ``` 现在,可以在任何jQuery对象上调用`hello`...

    jQuery.extend()、jQuery.fn.extend()扩展方法示例详解

    jQuery自定义了jQuery.extend()和jQuery.fn.extend()方法.其中jQuery.extend()方法能够创建全局函数或者选择器,而jQuery.fn.extend()方法能够创建jQuery对象方法. 例如: 代码如下: jQuery.extend({ showName : ...

    jQuery.js执行过程分析

    1. **`jQuery.extend`详解**: - **功能介绍**:`jQuery.extend`允许开发人员向jQuery对象或其原型添加新方法或属性。 - **实现原理**:该方法实际上是一个深拷贝的过程,能够将一个或多个对象的属性复制到目标...

    jquery.query.js

    6. 数组和对象操作:$.query.extend()用于合并对象,$.query.inArray()检查元素是否存在于数组中,这些都是常见的实用工具。 三、实战应用示例 1. 复杂查询:假设我们需要找出所有class为"active"并且id以"item-...

    jQuery中extend()和fn.extend()方法详解

    jQuery中的`extend()`和`fn.extend()`方法是用于合并对象属性和方法的工具,它们在扩展和定制jQuery功能时起着关键作用。 首先,`jQuery.extend()`方法允许开发者将一个或多个对象的属性和方法合并到一个现有对象上...

    jQuery.extend 函数及用法详细

    总结来说,`$.extend` 方法为 jQuery 功能的扩展提供了灵活而强大的工具,但开发者应当谨慎使用,以免产生难以预料的副作用。通过合理利用 `$.extend`,可以创建出既实用又易于维护的 jQuery 插件。

    详解jQuery插件开发中的extend方法

    1. 如果你使用`$.extend(src)`,源对象的属性会被添加到jQuery全局对象中,使得这些属性成为jQuery的全局方法。 2. 如果使用`$.fn.extend(src)`,源对象的属性会被添加到jQuery实例对象中,这样这些方法可以在选择器...

    jQuery中extends详解[借鉴].pdf

    `jQuery.extend`还可以省略`dest`参数,此时源对象会被合并到jQuery全局对象(`$`)或jQuery实例对象(`$.fn`)中。例如: ```javascript $.extend({hello: function() { alert('hello'); }}); // 全局扩展 $.fn....

    jQuery.js执行过程分析[收集].pdf

    它封装了XMLHttpRequest对象,提供了一套完整的异步数据通信解决方案,包括`$.ajax`、`$.get`、`$.post`等方法,使得开发者能够轻松地进行跨域请求和数据交互。 总结起来,jQuery.js的执行过程涉及构造函数、...

    jquery.timeage 使用

    **jQuery.timeago插件详解与应用** jQuery.timeago是一个非常实用的JavaScript插件,它能够帮助开发者轻松地在网页上动态展示时间间隔,将日期和时间转化为用户友好的格式,如"2分钟之前"或"4天前"。这个插件基于...

    jQuery中的deferred对象和extend方法详解

    jQuery中的`deferred对象`和`extend方法`是JavaScript异步编程的重要工具,尤其在处理AJAX请求和其他异步操作时非常有用。`deferred对象`是jQuery 1.5.0版本引入的,它提供了一种更优雅的方式来管理回调函数,解决了...

    jQuery插件开发的两种方法及$.fn.extend的详解

    开发扩展其方法时使用$.extend方法,即jQuery.extend(object); 代码如下: $.extend({ add:function(a,b){return a+b;} , minus:function(a,b){return a-b;} }); 页面中调用: 代码如下: var i = $.add(3,2); var j ...

Global site tag (gtag.js) - Google Analytics