函数的深拷贝

48 阅读1分钟
 function deepCloneFunction(func) {
        // 首先检查输入是否为函数
        if (typeof func !== 'function') {
          throw new Error('Input is not a function')
        }

        // 使用函数的源代码创建新的函数
        const funcString = func.toString()
        // 第一种拷贝函数方案
        // const clonedFunc = eval(`(${funcString})`)
        // 第二种拷贝函数方案
        const clonedFunc = new Function(`return ${funcString}`)()
        // 将原始函数的属性复制到新函数
        for (let key in func) {
          if (func.hasOwnProperty(key)) {
            clonedFunc[key] = func[key]
          }
        }

        return clonedFunc
      }
      function A() {
        console.log(1)
      }
      A.a = 1
      let cloneAA = deepCloneFunction(A)
      cloneAA.a = 300
      let cloneBA = deepCloneFunction(A)
      console.log(cloneAA.a, cloneBA.a)