5原生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);

  

转载于:https://www.cnblogs.com/gushixianqiancheng/p/10963926.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值