基于TypeScript 字符串函数转回函数后调用的问题


    //--------------转换函数,不用管---------------
    function stringifyFunction(obj: any) {
      let newobj = JSON.parse(JSON.stringify(obj))
      for (let key in obj) {
        if (obj[key] instanceof Function) {
          newobj[key] = obj[key].toString().replace(/[\n\t]/g, "");
          continue;
        }
        if (obj[key] instanceof Object) {
          newobj[key] = stringifyFunction(obj[key]);
        }
      }
      return newobj;
    }
    function objectToString(obj: any) {  // 用于替代JSON.stringify函数
      let _object = stringifyFunction(obj);
      return JSON.stringify(_object)
    }
    function stringToFunction(obj: any) {  // 将对象中的函数字符串转化为函数
      var regex = /^((function\s)|.)([a-zA-Z_][a-zA-Z0-9_]*)\(.*\)\s\{.*\}/  //匹配函数字符串
      for (let key in obj) {
        if (obj[key] instanceof Object) {
          stringToFunction(obj[key]);
        } else {
          if (regex.test(obj[key])) { // 是一个函数
            try {
              let params = obj[key].substring(obj[key].indexOf('(') + 1, obj[key].indexOf(')'));
              let operation = obj[key].substring(obj[key].indexOf("{") + 1, obj[key].length - 1);
              obj[key] = new Function(params, operation);
            } catch (e) {
              console.log(e)
            }
          }
        }
      }
      return obj
    }
    function stringToObject(string: any) {  // 用于替代JSON.parse
      let obj = JSON.parse(string);  //将字符串转为对象
      return stringToFunction(obj)    // 将对象中的函数字符串转为函数
    }
    //--------------转换函数,不用管  end---------------

    //实际项目中 funcTest 是放在单独一个 .ts 中
    function funcTest() {
      function func1(a: any) {
        console.log("我是func1", a);
        func2();
      }
      function func2() {
        console.log("我是func2");
      }
      return {
        func1,
        func2
      }
    }

    //------------------- 分割线--------------
    const { func1, func2 } = funcTest();
    var obj = {
      func: (a: any) => {
        console.log(a);
        func1(a);
      }
    }
    //obj.func("参数2"); //=>正常打印 '我是func1','我是func2'

    const str = objectToString(obj);//对象转字符串
    var newObj = stringToObject(str);//字符串转回

    newObj.func("参数1");//打印参数1后报错,该如何解决?
    //如果传参 可以解决,但是实际项目  func 不能给其他参数。属于基于ts的内置函数
    //newObj.func("参数1", funcTest()); //虽然能解决,但是实际项目不能运用。

问题:
我有一个obj 对象,里面有个 func 的函数属性,调用了 funcTest() 里的 func1()方法
在经过字符串转换后,引用会丢失,造成 调用 func1() 时会报错。
如果调用时 传 funcTest() 可以解决这个问题,但是我的实际项目中, func() 不可以再传额外的参数了。