原生JS封装深浅克隆
3672Js.Com2019-05-31 00:39 来源:未知 阅读:7975 关注度3
原生JS封装深浅克隆
function deepOrShallowClone() { var target = null; var arguments0 = arguments[0]; var lastArguments = arguments[arguments.length - 1]; //首次执行arguments.length为2,后来递归执行arguments.length为3 if (arguments0 === true) { if ({}.toString.call(lastArguments) === "[object Array]") { //{}.toString.call也可以用Object.prototype.toString.call代替 target = []; } if ({}.toString.call(lastArguments) === "[object Object]") { target = {}; } for (var key in lastArguments) { var value = lastArguments[key]; var isArray = {}.toString.call(value) === "[object Array]"; var isObject = {}.toString.call(value) === "[object Object]"; if (isArray || isObject) { if (isArray) { var clone = []; } if (isObject) { var clone = {}; } console.log("我是深克隆,将通过下面的递归,再次路过这里"); target[key] = deepOrShallowClone(true, clone, value); } else { target[key] = value; } } } else if (arguments0 === false) { target = arguments[1]; } else { target = arguments0; } return target; } var beforeClone = {a: 1, b: [2, {c: 3, d: {e: 4, f: [5, {g: 6}]}}]}; var afterShallowClone1 = deepOrShallowClone(beforeClone); var afterShallowClone2 = deepOrShallowClone(false, beforeClone); var afterDeepClone = deepOrShallowClone(true, beforeClone); console.log(afterShallowClone1); console.log(afterShallowClone2); console.log(afterDeepClone);
本站文章为3672js教程网友分享投稿,版权归原作者,欢迎任何形式的转载,但请务必注明出处。同时文章内容如有侵犯了您的权益,请联系我们处理。
评论已被关闭