$.extend()浅拷贝深拷贝
参考网址:http://bijian1013.iteye.com/blog/2255037
jQuery.extend() 函数用于将一个或多个对象的内容合并到目标对象。
注意:1. 如果只为$.extend()指定了一个参数,则意味着参数target被省略。此时,target就是jQuery对象本身。通过这种方式,我们可以为全局对象jQuery添加新的函数。
2. 如果多个对象具有相同的属性,则后者会覆盖前者的属性值。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>$.extend()浅拷贝深拷贝</title>
<script src="http://apps.bdimg.com/libs/jquery/1.8.1/jquery.min.js"></script>
</head>
<body>
<!--参考网址:http://bijian1013.iteye.com/blog/2255037-->
<script type="text/javascript">
$(function () {
var list = function () {
this.a = {
name : 'zhangshan',
age : 28,
company : {
name : '腾讯',
address : '深圳',
size : 10000
}
};
this.b={
name : 'lisi',
age : 30,
company : {
name : '阿里巴巴',
address : '杭州'
},
stature : '172cm'
};
this.show = function (c) {
console.log('a:' + JSON.stringify(this.a));
console.log('b:' + JSON.stringify(this.b));
console.log('c:' + JSON.stringify(c));
console.log('\n')
}
};
/*浅拷贝*/
q1();
q2();
q3();
/*深拷贝*/
s1();
s2();
s3();
s4();
function q1() {
var q1 = new list;
var c = $.extend(q1.a,q1.b);
q1.show(c);
// a:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"北京"},"stature":"172cm"}
// b:{"name":"test","age":30,"company":{"name":"阿里巴巴","address":"北京"},"stature":"172cm"}
// c:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"北京"},"stature":"172cm"}
};
function q2() {
var q2 = new list;
var c = $.extend(q2.a,q2.b);
q2.b.name = 'test';
q2.b.company.address = '北京';
q2.show(c);
// a:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"北京"},"stature":"172cm"}
// b:{"name":"test","age":30,"company":{"name":"阿里巴巴","address":"北京"},"stature":"172cm"}
// c:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"北京"},"stature":"172cm"}
};
function q3() {
var q3 = new list;
var c = $.extend({},q3.a,q3.b);
q3.show(c);
// a:{"name":"zhangshan","age":28,"company":{"name":"腾讯","address":"深圳","size":10000}}
// b:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"杭州"},"stature":"172cm"}
// c:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"杭州"},"stature":"172cm"}
};
function s1() {
var s1 = new list;
var c = $.extend(true,s1.a,s1.b);
s1.show(c);
// a:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"杭州","size":10000},"stature":"172cm"}
// b:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"杭州"},"stature":"172cm"}
// c:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"杭州","size":10000},"stature":"172cm"}
};
function s2() {
var s2 = new list;
var c = $.extend(true,s2.a,s2.b);
s2.b.name = 'test';
s2.b.company.address = '北京';
s2.show(c);
// a:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"杭州","size":10000},"stature":"172cm"}
// b:{"name":"test","age":30,"company":{"name":"阿里巴巴","address":"北京"},"stature":"172cm"}
// c:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"杭州","size":10000},"stature":"172cm"}
};
function s3() {
var s3 = new list;
var c = $.extend(true,{},s3.a,s3.b);
s3.show(c);
// a:{"name":"zhangshan","age":28,"company":{"name":"腾讯","address":"深圳","size":10000}}
// b:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"杭州"},"stature":"172cm"}
// c:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"杭州","size":10000},"stature":"172cm"}
};
function s4() {
var s4 = new list;
var c = $.extend(true,{},s4.a,s4.b);
s4.a.name = 'zhangshan01';
s4.b.name = 'lisi01';
s4.b.company.address = 'shengzhen';
s4.show(c);
// a:{"name":"zhangshan01","age":28,"company":{"name":"腾讯","address":"深圳","size":10000}}
// b:{"name":"lisi01","age":30,"company":{"name":"阿里巴巴","address":"shengzhen"},"stature":"172cm"}
// c:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"杭州","size":10000},"stature":"172cm"}
};
})
</script>
</body>
</html>
随机推荐
- android 垃圾回收机制
1.垃圾收集算法的核心思想 java语言提供了自动的GC机制,系统会经常检查内存,采用对象引用计数的方式,将引用次数为0的对象回收.这样可以防止两个危险:(1)防止无用对象占用内存资源 (2)防止有用 ...
- 如何发起、防御和测试XSS攻击,我们用DVWA来学习(上)
XSS 全称Cross Site Scripting 即‘跨站脚本攻击’. 从其中文释义我们能直观的知道,这是一种对网站的攻击方式. 其原理在于,使用一切可能手段,将可执行脚本(scripting)植 ...
- 【ASP.NET Core快速入门】(七)WebHost的配置、 IHostEnvironment和 IApplicationLifetime介绍、dotnet watch run 和attach到进程调试
WebHost的配置 我们用vs2017新建一个空网站HelloCore 这里的CreateDefaultBuilde实际上已经在内部替我们做好了默认配置. UseKestrel 使用kestrel ...
- 【C#加深理解系列】(一)反射
什么是反射 反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息.有了反射,即可对每一个类型了如指掌.另外我还可以直接创 ...
- .Net语言 APP开发平台——Smobiler学习日志:如何调用API进行短信发送
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 二.发送短信代码 VB: Pr ...
- [转]在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查
本文转自:https://www.cnblogs.com/kongxianghai/p/5582661.html Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用Ja ...
- 《CLR via C#》读书笔记(一)——CLR的执行模式
前言 万事开头难,很早之前就想写博客记录些东西,迟迟未行动,甚是遗憾.原因诸多,大体上无非都是懒.没意志力等等.这次从自己的读书笔记开始,兴许能够有所改变. 一.CLR概念 CLR(Common La ...
- Linux学习笔记之MySql的安装(CentOS)
一.移除mariadb 由于CentOS默认安装了mariadb,所以在安装MySql之前先移除mariadb,使用命令:yum remove mariadb-libs.x86_64,如下图所示: 二 ...
- JAVA_接口_默认方法&静态方法
1.小结(注意): 1.接口中无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰 2.接口中,没有构造方法,不能创建对象 3.接口中,没有静态代码块 ...
- Java 学习笔记 线程控制
题目一 本质上来说,线程是不可控制的,线程的执行是由CPU资源分配决定的,我们无法干预系统CPU的资源分配,但我们可以增加条件来让线程按照我们的预想顺序来执行. 比如.如果当前的执行的线程不满足我们所 ...