js拷贝
现在有一个对象
var obj = {
name: '隔壁老王',
age: 60,
sex: 'male'
}
我们现在想把obj里的每一个属性拷贝到一个空对象var obj1 = {}中,那么需要写一个克隆方法,首先遍历一下obj对象,然后把里面的每一个属性都拷贝过去。代码如下:
var obj = {
name: '隔壁老王',
age: 60,
sex: 'male'
};
var obj1 = {};
function clone(origin, target) {
for (var prop in origin) {
target[prop] = origin[prop];
}
};
clone(obj, obj1);
在控制台中查看obj1,会发现实现了对obj的拷贝。
我们再对这个方法进行一些完善:有可能用户在执行clone方法时,只传origin一个参数,然后将函数执行结果赋给对象obj1,所以我们需要在方法最下方加一个返回值target,返回克隆结果,相应的也要在函数体里声明var target = {};
还有一种情况obj1对象里事先有其他属性,那么函数体里写 var target = target || {};
function clone(origin, target) {
var target = target || {};
for (var prop in origin) {
target[prop] = origin[prop];
}
return target;
}
var obj = {
name: '隔壁老王',
age: 60,
sex: 'male',
card: ['信用卡', '借记卡', '理发卡'],
wife: {
name: '小刘',
son: {
name1: '王小宝',
name2: '王二宝'
}
},
divorce: function () { }
};
var obj1 = {
father: "老王"
};
function deepClone(origin, target) {
var target = target || {},
toStr = Object.prototype.toString,
arrStr = '[object Array]';
for (var prop in origin) {
if (origin.hasOwnProperty(prop)) {
if (typeof (origin[prop]) == 'object' && origin[prop] !== null) {
target[prop] = (toStr.call(origin[prop]) == arrStr) ? [] : {};
deepClone(origin[prop], target[prop]);
} else {
target[prop] = origin[prop];
}
}
}
return target;
}
deepClone(obj, obj1);
js拷贝的更多相关文章
- JS 拷贝传值和引用传值
1.拷贝传值:基本数据类型都是“拷贝传值”. 拷贝传值,就是将一个变量的值“拷贝”一份,传给了另一个变量. 拷贝传值中,两个变量之间没有任何联系,修改其中一个变量的值,另一个不会改变. 这两个变量之间 ...
- js 拷贝clone
array Array.prototype.clone=function(){ return this.slice(0); } 对象 var o = {a: [1]}; //浅拷贝 var o1 = ...
- js拷贝实例;
,]]; // var arr2 =arr1.slice(0); // arr1[0] ="z"; // arr1[2][0] = "v"; // consol ...
- js 拷贝树copytree
希望能摆脱lodash的深拷贝
- js拷贝指定内容到剪切板
function copyTextToClipboard(text) { var textArea = document.createElement("textarea"); te ...
- 让IE8支持HTML5及canvas功能!chart.js图表绘制工具库IE8上兼容方案
第一步,我们加上对html5的支持. <!--[if IE]> <script src="/public/html5.js" type="text/ja ...
- Three.js学习笔记 – “我和小伙伴都惊呆了”的特效和Three.js初探
什么是Three.js three.js是JavaScript编写的WebGL第三方库.提供了非常多的3D显示功能.Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包 ...
- npm Error: Cannot find module './auth.js'
Mac 下升级 npm 到 v6.8.0 翻车. 提示: Error: Cannot find module './auth.js' 根据回显的报错路径,定位到这个文件中: npm/node_modu ...
- ASP.NET MVC+Vue.js实现联系人管理
接触了一天vue.js,简单浏览了一本关于vue的电子书,就开始动手使用ASP.NET MVC和Vue.js开发一个联系人管理的小程序. 先看一下这个联系人管理的小程序的界面,也就是我们大概要实现什么 ...
随机推荐
- linux ln 命令使用参数详解(ln -s 软链接)
ln是linux中一个非常重要的命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在 ...
- mysql installer gentask怎么关闭
1 前言 安装mysql community版本的,可能经常会看到mysql installer gentask console框出现,有时候甚烦,我们并不需要它经常检测更新. 2 解决方案 开始/附 ...
- Python-视图 触发器 事务 存储过程
1.视图2.触发器*** 在某个时间发生了某个事件时 会自动触发一段sql语句3.事务*****4.存储过程***** 5.函数6.备份与恢复*** mysqldump -u -p (库名 [表名] ...
- 6)协程三( asyncio处理并发)
一:使用 asyncio处理并发 介绍 asyncio 包,这个包使用事件循环驱动的协程实现并发.这是 Python 中最大也是最具雄心壮志的库之一. 二:示例 1)单任务协程处理和普通任务比较 #普 ...
- Python学习-字符编码浅析
1.什么是字符编码 既然是简述那肯定是简单明了.字符编码,看名字就是一种字符的编码格式,由于计算机内部采用二进制,想要将人类的语言字符输入到计算机就需要一种编码格式,这就是字符编码.字符------- ...
- Java二叉树的实现与特点
二叉树是一种非常重要的数据结构,它同时具有数组和链表各自的特点:它可以像数组一样快速查找,也可以像链表一样快速添加.但是他也有自己的缺点:删除操作复杂. 我们先介绍一些关于二叉树的概念名词. 二叉树: ...
- linux之ab压力测试工具
等待... https://www.cnblogs.com/myvic/p/7703973.html
- Penetration testing _internal & wireless Penetration Testing
第一部分 渗透测试步骤 ---参考资料 Ethical Hacking: The Value of Controlled Penetration Tests 下载地址 链接:https://pa ...
- MySQL is running but PID file could not be found(解决方法)
启动MySQL时报错: [root@xzw /]# service mysqld status MySQL is running but PID file could not be found ...
- AI-URL注册器
官方文档地址:https://www.django-rest-framework.org/tutorial/quickstart/#serializers #url生成器生成四个url,就可以访问关于 ...