js如何传递在一次循环引用中,传递值?

js如何传递在一次循环引用中,传递值?

 

外面放一个全局变量,可以使用对象或者map将值放入其中,然后第二个函数里使用键引用即可;

const weakMap = new WeakMap() //解决对象的循环引用;

export function deepClone(originValue) {
  const toString = Object.prototype.toString


  //2.引用数据类型object
  if (toString.call(originValue) === '[object Object]') {
    const newObj = {}
    //2.0循环引用问题
    if (weakMap.has(originValue)) return weakMap.get(originValue)  //如果map中已经有了这个引用,则直接返回map里的这个值即可;
    weakMap.set(originValue, newObj)return newObj
  }
 
}





let obj = {foo:'bar'};
obj.circular = obj; //设置循环引用

deepClone(obj)
 

 第二种方式:

export function deepClone(originValue, weakmap = new WeakMap()) { //使用在函数参数中定义weakmap,而不在全局中定义weakmap,这样可以避免每次调用deepclone时都往weakmap里插入数据,导致后期的weakmap将会成为一个非常的数据;
  const toString = Object.prototype.toString
  //2.引用数据类型object
  if (toString.call(originValue) === '[object Object]') {
    const newObj = {}
    //2.0循环引用问题
    if (weakMap.has(originValue)) return weakMap.get(originValue)  //如果map中已经有了这个引用,则直接返回map里的这个值即可;
    weakMap.set(originValue, newObj)return newObj
     //2.1普通的key
      for (const key in originValue) {
      newObj[key] = deepClone(originValue[key], weakMap)
      }

  }
 
}

 

posted @ 2022-05-09 12:25  Eric-Shen  阅读(120)  评论(0编辑  收藏  举报