arguments.callee实现深拷贝

Posted xiaojianwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arguments.callee实现深拷贝相关的知识,希望对你有一定的参考价值。

最近正在看一个腾讯课堂里面的学习视频中的js知识点,然后有一个深拷贝的题,于是就做了一下,使用arguments.callee实现深拷贝。

<script type="text/javascript">
			var obj={
				"name":"小二",
				"age":18,
				"sex":"man",
				"grade":{
					"文综":{
						"历史":100,
						"政治":80
					},
					"理综":{
						"物理":87,
						"化学":68
					}
				},
				"hobby":[[1,1,5,4],[2,3,4,5],[8,7,9,8]]
			};
			var obj1={};
			//实现深拷贝
			function copyObject(o1,o2){
				var objc1=o1;
				var objc2=o2;
				for( prop in objc1){
					if(typeof(objc1[prop])+""!=="object"){
						//拷贝原始值
						objc2[prop]=objc1[prop];
					}else if(Object.prototype.toString.call(objc1[prop])+""==="[object Array]"){
						//拷贝数组
						objc2[prop]=[];
						arguments.callee(objc1[prop],objc2[prop])
					}
					else{
						//拷贝对象
						objc2[prop]={};
						arguments.callee(objc1[prop],objc2[prop])
					}
				}
				return objc2;
			}
			console.log(obj); //原对象
			console.log(copyObject(obj,obj1)); //拷贝后对象
		</script>

  

实现结果:

技术图片

以上是关于arguments.callee实现深拷贝的主要内容,如果未能解决你的问题,请参考以下文章

arguments.callee Function.callee arguments.caller总结

arguments.callee

arguments.callee的用法

为啥 arguments.callee 会损害性能?

arguments.callee用法

12. arguments.callee[name]代替定义开关变量