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 不过是 ...
随机推荐
- BestCoder Round #25 1002 Harry And Magic Box [dp]
传送门 Harry And Magic Box Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- iOS推送的开启与关闭
开启: [[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationType ...
- treetable 用法小例
插件地址:http://pan.baidu.com/s/1kVf0Kcfcript src="/plugins/jQuery/jQuery-2.1.4.min.js">< ...
- LeetCode:926. 将字符串翻转到单调递增
暴力法超时:思想:动态规划 public int minFlipsMonoIncrb(String S) { int result = S.length(); for (int i = 0; i &l ...
- MySQL 为日期增加一个时间间隔
set @dt = now(); select date_add(@dt, interval 1 day); - 加1天 select date_add(@dt, interval 1 hour) ...
- KernelHacking
https://kernelnewbies.org/KernelHacking-HOWTO/Debugging_Kernel
- 用JS过滤Emoji表情的输入
本文为原创,转载请注明出处: cnzt 文章:cnzt-p http://www.cnblogs.com/zt-blog/p/6773854.html 在前端页面开发过程中,总会碰到不允许 ...
- 50 个 Bootstrap 插件
Bootstrap是快速开发Web应用程序的前端工具包.它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的版式,表单,buttons,表格,网格系统等等. 本文向你 ...
- Application具体解释(一)
1:Application是什么? Application和Activity,Service一样,是android框架的一个系统组件.当android程序启动时系统会创建一个 applicati ...
- 【转载】“菜”鸟理解.NET Framework(CLI,CLS,CTS,CLR,FCL,BCL)
既然要学.NET,就要先认识认识她,我不喜欢大段大段文字的东西,自己通过理解,画个图,来看看.NET的沉鱼落雁,闭月羞花之容. 最下层蓝色部分是.NET Framework的基础,也是所有应用软件的基 ...