Javascript对象拷贝(clone)
Javascript对象拷贝(clone),希望大家给点建议
1. [代码]方法代码
function cp(source, target) {
function isBaseType(v) {
var type = typeof v;
var basetype = {
"string": true,
"number": true,
"boolean": true,
"function": true,
"undefined": true
};
return basetype[type] || v === null;
}
function createClone(v) {
var clone = [];
if (!(v instanceof Array)) {
clone = {};
}
return clone;
}
function createCloneFn(fn) {
var fncode = fn.toString();
var regex_params = /^function\s+?(\()([\s\S]*?)(\))/;
var params = [];
var params_index = 2;
var result = fncode.match(regex_params);
if (result) {
var param_code = result[params_index];
if (param_code) {
params = param_code.split(",")
}
}
var fncode = fncode.replace(regex_params, "").replace(/^\s*?\{|\}\s*?$/g,"");
fncode += " console.log('clone')";
params.push(fncode);
return Function.apply(null, params); ;
}http://www.huiyi8.com/guoqi/
function createVal(v)
{国旗图标
var val = v;
if( typeof v =="function" )
{
val = createCloneFn(v);
}
return val ;
}
if (source instanceof Function) {
target = createCloneFn(source);
} else if (source instanceof Array) {
if (target instanceof Array) {
var source_size = source.length;
for (var index = 0; index < source_size; index++) {
var item = source[index];
if (!isBaseType(item)) {
var clone_array = createClone(item);
target.push(clone_array);
arguments.callee(item, clone_array);
}
//基础类型
else {
target.push( createVal(item));
}
}
} else {
//console.log("数组拷贝不成立");
}
} else if (typeof source == "object") {
if (!isBaseType(target))
for (var attrname in source) {
var val = source[attrname];
//是否为基础类型
if (!isBaseType(val)) {
var clone_obj = createClone(val);
target[attrname] = clone_obj;
arguments.callee(val, clone_obj);
} else {
target[attrname] = createVal(val);
}
}
}
return target;
}
2. [代码]测试代码
var target = [];
var source = [
[{
a: {
"show": function() {
alert(1)
}
}
}]
];
target =cp(source, target);
Javascript对象拷贝(clone)的更多相关文章
- 也说Javascript对象拷贝及疑问
一.浅拷贝 当我们需要将一个对象拷贝至另一个对象时,我们一般会这么实现 function shadowCopy(source,target){ var target=target||{}; for(v ...
- JavaScript 对象拷贝研究
介绍一下JavaScript里面的一些对象拷贝的方法 浅拷贝 深拷贝 利用序列化进行对象拷贝
- [javascript] 对象拷贝
Object.prototype.clone = function() { var copy = (this instanceof Array) ? [] : {}; for (attr in thi ...
- javascript对象拷贝
浅拷贝 浅拷贝函数: function copy(p){ var c = {}; for (var i in p){ c[i] = p[i]; } c.uber = p; return c; } 测试 ...
- javascript对象深拷贝,浅拷贝 ,支持数组
javascript对象深拷贝,浅拷贝 ,支持数组 经常看到讨论c#深拷贝,浅拷贝的博客,最近js写的比较多, 所以也来玩玩js的对象拷贝. 下面是维基百科对深浅拷贝的解释: 浅拷贝 One meth ...
- javascript中的对象拷贝
js中的数据类型 在介绍javascript中的对象的拷贝之前,我先介绍一个基础的东西,javascript中的数据类型. 我们做前端的应该都知到在es6 之前,javascript中的数据类型Boo ...
- 也来玩玩 javascript对象深拷贝,浅拷贝
经常看到讨论c#深拷贝,浅拷贝的博客,最近js写的比较多, 所以也来玩玩js的对象拷贝. 下面是维基百科对深浅拷贝的解释: 浅拷贝 One method of copying an object is ...
- es6 javascript对象方法Object.assign()
es6 javascript对象方法Object.assign() 2016年12月01日 16:42:34 阅读数:38583 1 基本用法 Object.assign方法用于对象的合并,将源对象 ...
- JavaScript 对象继承 OOP (三)
对象继承 A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法.这对于代码的复用是非常有用的. JavaScript 语言的继承不通过 class (es6 中的class 不过是 ...
随机推荐
- Lucas 卢卡斯定理
Lucas: 卢卡斯定理说白了只有一条性质 $$ C^n_m \equiv C^{n/p}_{m/p} \times C^{n \bmod p}_{m \bmod p} \ (mod \ \ p) $ ...
- ElasticSearch索引自定义类型
ES可以自动检测字段并设置映射类型.如果设置的索引类型不是我们所需要的,我们可以自行定义. Rest API设置自定义索引 首先通过ES自动映射一个IP地址的字段的类型: <pre name=& ...
- 【Educational Codeforces Round 49 (Rated for Div. 2) 】
A:https://www.cnblogs.com/myx12345/p/9843826.html B:https://www.cnblogs.com/myx12345/p/9843869.html ...
- EMD距离
一.场景介绍 最近在研究一个场景:图片质量评分,给一张图片一个预测的分数. 里面提到了用 EMD(Earth Mover’s Distance)算法来评估两张图片之间的分布距离.下面主要讲解下 ...
- Struts2的标签三大类是什么?
Struts2 标签 一 Struts标签的简介: Struts2 自己封装了一套标签,比 JSTL 强大,而且与 Struts2 中的其他功能无缝结合. 当然 Strust2 标签的内容很多,随着版 ...
- [BOI2007] Mokia
题目描述 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能够回 ...
- 数据库设计三范式(3NF)
问:当时你数据库是如何设计的? 答:当时是按照三范式规范设计的: 第一范式: 1:数据库的原子性,即保证数据库表的每一列都不可分割的 第二范式: 1:原子性,即保证数据库表的每一列都不可分割 2:表中 ...
- 【C#】RGB,CMYK,HSB各种颜色表示的转换(转)
[C#]RGB,CMYK,HSB各种颜色表示的转换 一.表示颜色的方式有很多种,如RGB,CMYK,HSB,Hex等等 1.RGB:这种表示颜色由三原色构成,通过红,绿,蓝三种颜色分量的不同,组合 ...
- BUPT复试专题—C翻转(2010)
https://www.nowcoder.com/practice/74bdb725421c4f80b4aca7266818baf0?tpId=67&tqId=29639&rp=0&a ...
- Maple入门使用教程
http://anony3721.blog.163.com/blog/static/51197420105173915247/ 命令的运行:1.每条命令必须用":"(运行后不显示) ...