【转】JavaScript中的对象复制(Object Clone)
2024-10-11 23:04:18
JavaScript中并没有直接提供对象复制(Object Clone)的方法。因此下面的代码中改变对象b的时候,也就改变了对象a。
a = {k1:1, k2:2, k3:3};
b = a;
b.k2 = 4;
如果只想改变b而保持a不变,就需要对对象a进行复制。
用jQuery进行对象复制
在可以使用jQuery的情况下,jQuery自带的extend
方法可以用来实现对象的复制。
a = {k1:1, k2:2, k3:3};
b = {};
$.extend(b,a);
自定义clone()方法来实现对象复制
下面的方法,是对象复制的基本想法。
Object.prototype.clone = function() {
var copy = (this instanceof Array) ? [] : {};
for (attr in this) {
if (!obj.hasOwnProperty(attr)) continue;
copy[attr] = (typeof this[i] == "object")?obj[attr].clone():obj[attr];
}
return copy;
}; a = {k1:1, k2:2, k3:3};
b = a.clone();
下面的例子则考虑的更全面些,适用于大部分对象的深度复制(Deep Copy)。
function clone(obj) {
// Handle the 3 simple types, and null or undefined
if (null == obj || "object" != typeof obj) return obj; // Handle Date
if (obj instanceof Date) {
var copy = new Date();
copy.setTime(obj.getTime());
return copy;
} // Handle Array
if (obj instanceof Array) {
var copy = [];
for (var i = 0, var len = obj.length; i < len; ++i) {
copy[i] = clone(obj[i]);
}
return copy;
} // Handle Object
if (obj instanceof Object) {
var copy = {};
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);
}
return copy;
} throw new Error("Unable to copy obj! Its type isn't supported.");
}
最新文章
- Swift 03.Dictionary
- js字节转换、字节转换GB等
- Intellij idea开发Hadoop MapReduce程序
- LintCode ";Coins in a Line II"; !
- Unity--截取屏幕任意区域
- CentOS服务器的基本配置和查看
- Oracle 课程八之性能优化之10053事件
- 服务控件与html标签的一点
- div模块变灰
- debian install &; configure(2)-drivers-ati
- Android探究之ANR
- ASP.NET 异步返回的Action (编辑中。。。)
- Nginx 11阶段的顺序处理
- Rhino学习教程——1.5
- sql server版本、组件和管理工具
- Luogu3605 [USACO17JAN]Promotion Counting晋升者计数
- scrapy之Crawspider 腾讯招聘实战案例
- 【LeetCode每天一题】Merge Two Sorted Lists(合并两个排序链表)
- 数据库-->;表操作
- 7.5 C++基本序列式容器