JS实现对象数组的深拷贝

由于对象和数组属于引用类型,所以在给对象赋值时,通常不能使用“=”进行赋值,实质上它们指向了同一个引用地址,如下:

var testParams = {
		name: 'hh',
		childParam: {
			name: '666',
			age: '20'
		},
		myArr: [1,2,3,4]
	}
var bigParamsCopy = bigParams;
console.log(bigParamsCopy)
console.log(bigParams);

运行结果如图,原对象bigParams的值也改变了
在这里插入图片描述

主要函数实现

//obj为传入的需要拷贝的对象
function deepCopy(obj) {
		var newObj = {};
		//使用for in遍历对象
		for (k in obj) {
			//判断对象属性是否为Object或者Array
			if (typeof obj[k] == 'object') {
				//递归调用方法返回拷贝对象
				newObj[k] = deepCopy(obj[k]);
			} else {
				newObj[k] = obj[k];
			}
		}
		return newObj;
	}
	//example
	var testParams = {
		name: 'hh',
		childParam: {
			name: '666',
			age: '20'
		},
		myArr: [1,2,3,4]
	}
	var myParams = deepCopy(testParams);//改变myParams中的数组不会改变testParams中的值
	myParams.myArr = ['a', 'b', 'c'];
	console.log(myParams.myArr)    //['a', 'b', 'c']
	console.log(testParams.myArr); //[1,2,3,4]

将方法绑定到原型上

给Function对象定义一个method

Function.prototype.method = function (name, func) {
		// body...
		if (!this.prototype[name]) {
			this.prototype[name] = func;
		}
		return this;
	}

给Object定义方法

Object.method('deepCopy', function() {
		var newObj = {};
		for (k in this) {
			console.log(typeof this[k])
			if (typeof this[k] == 'object') {
				console.log(this[k])
				newObj[k] = deepCopy(this[k]);
			} else {
				newObj[k] = this[k];
				//return obj[k];
			}
		}
		return newObj;
	})
	

调用方式
var bigParams4 = bigParams.deepCopy();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值