当前位置: 首页 > 中文手册 > jQuery.extend() 函数详解

jQuery.extend() 函数详解

jQuery.extend()函数用于将一个或多个对象的内容合并到目标对象

该函数可以将一个或多个对象的成员属性和方法复制到指定的对象上。

该函数属于全局jQuery对象。

语法

静态函数jQuery.extend()有以下两种用法:

用法一:jQuery 1.0 新增该用法。

jQuery.extend( target [, object1 ] [, objectN... ] )

用法二:jQuery 1.1.4 新增该用法。

jQuery.extend( [ deep ], target , object1 [, objectN... ] )

用法二是用法一的变体,参数deep用于指示是否深度递归合并。

参数

请根据前面语法部分所定义的参数名称查找对应的参数。

参数描述
deep可选/Boolean类型指示是否深度合并对象,默认为false。如果该值为true,且多个对象的某个同名属性也都是对象,则该"属性对象"的属性也将进行合并。
targetObject类型目标对象,其他对象的成员属性将被复制到该对象上。
object1可选/Object类型第一个被合并的对象。
objectN可选/Object类型第N个被合并的对象。

注意事项

  • 该函数复制的对象属性包括方法在内。此外,还会复制对象继承自原型中的属性(JS内置的对象除外)。
  • 参数deep的默认值为false,你可以为该参数明确指定true值,但不能明确指定false值。简而言之,第一个参数不能为false值。
  • 如果参数为nullundefined,则该参数将被忽略。
  • 如果只为$.extend()指定了一个参数,则意味着参数target被省略。此时,target就是jQuery对象本身。通过这种方式,我们可以为全局对象jQuery添加新的函数。

  • 如果多个对象具有相同的属性,则后者会覆盖前者的属性值。

返回值

jQuery.extend()函数的返回值是Object类型,返回扩展了其他对象的属性后的目标对象(即参数target)。

示例&说明

jQuery.extend()函数的常规用法请参考如下jQuery代码:

//在当前页面内追加换行标签和指定的HTML内容
function w( html ){
	document.body.innerHTML += "<br/>" + html;
}


var x = { name:"CodePlayer" };
var y = { age: 18 };
var z = { site: "www.365mini.com"  };

// y和z的属性将被合并复制到对象x上
var obj = $.extend( x, y, z );
w( obj === x ); // true
w( obj.name ); // CodePlayer
w( obj.age ); // 18
w( obj.site ); // www.365mini.com

运行代码

如果多个被合并对象有相同的属性,则后者会覆盖之前的属性。

var x = { name:"CodePlayer", age: 20 };
var y = { age: 18 };
var z = { site: "www.365mini.com", age: 21  };

var obj = $.extend( x, y, z );
// 三个对象都有age属性,以最靠后的对象z为准
w( obj.age ); // 21

运行代码

此外,如果多个对象的同名属性都是对象,则合并这些"属性对象"的属性。

var x = { name:"CodePlayer", map:{ a: 1, b: 1 } };
var y = { map: { b: 2, c: 2  } };

// 后者的map属性直接覆盖前者的map属性
var obj = $.extend( x, y );

for(var i in obj.map ){
	w( i + "=" + obj.map[i] );
}


w(""); // 换行隔开
/* 以下是深度复制 */


x = { name:"CodePlayer", map:{ a: 1, b: 1 } };
y = { map: { b: 2, c: 2  } };

// 两者的map属性都是对象,则合并map对象的属性。
obj = $.extend( true, x, y );

for(var i in obj.map ){
	w( i + "=" + obj.map[i] );
}

运行代码

如果只为该函数指定一个参数,则表示省略target参数,target参数默认为jQuery对象本身。

var x = { 
	sayHi: function(){
		alert("这是新增的测试方法");
	}
};

// 只有一个参数,则表示省略target参数,target参数默认为jQuery对象本身
var obj = $.extend( x );
w( obj === $ ); // true
obj.sayHi(); // 这是新增的测试方法

运行代码

51 0
我们认为: 用户的主要目的,是为了获取有用的信息,而不是来点击广告的。因此本站将竭力做好内容,并将广告和内容进行分离,确保所有广告不会影响到用户的正常阅读体验。用户仅凭个人意愿和兴趣爱好点击广告。
我们坚信:只有给用户带来价值,用户才会给我们以回报。
CodePlayer技术交流群1CodePlayer技术交流群1

帮朋友打一个硬广告:

P2P网贷系统(Java版本) 新年低价大促销,多年P2P技术积累,系统功能完善(可按需定制,可支持第三方存管、银行存管),架构稳定灵活、性能优异、二次开发快速简单。 另可提供二次开发、安装部署、售后维护、安全培训等一条龙服务。

外行看热闹,内行看门道。可以自信地认为,在系统设计上,比市面上的晓风、迪蒙、方维、绿麻雀、国融信、金和盛等P2P系统要好。
深圳地区支持自带技术人员现场考察源代码、了解主要技术架构,货比三家,再决定是否购买。

也可推荐他人购买,一旦完全成交,推荐人可获得实际售价 10% 的返现。
有意向者,详情请 点击这里 联系,工作时间立即回复。