首页 > 解决方案 > 解析方法并返回结果

问题描述

我有这种情况,我有一个评估字符串的函数。我遇到的问题是这不适用于方法。

JSON.stringify()无法对方法进行字符串化,所以我在这里使用这个替换函数。

不幸的是,当我尝试执行它时,该函数是一个字符串。

let obj = {
   name: "Max",
   test() {
      return "cool";
   }
}


function parseString(str, obj) {
  let variables = Object.keys(obj).join(",");
  let strData = JSON.stringify(obj, function(key, value) {
    if (typeof value === "function") {
      return value.toString();
    } else {
      return value;
    }
  });
  return new Function(`let {${variables}} = ${strData}; return ${str}; `).call(
    obj
  );
}

console.log(parseString("name", obj)); //expected output: "max"
console.log(parseString("test()", obj)); //expected output: "cool"

有没有办法执行函数并返回结果?一些解决方法?

标签: javascript

解决方案


let obj = {
   name: "Max",
   test() {
      return "cool";
   }
}


function parseString(str, obj) {
  let variables = Object.keys(obj).join(",");
  let strData = JSON.stringify(obj, function(key, value) {
    if (typeof value === "function") {
      return value();
    } else {
      return value;
    }
  });
  return new Function(`let {${variables}} = ${strData}; return ${str}; `).call(
    obj
  );
}

console.log(parseString("name", obj)); //expected output: "max"
console.log(parseString("test", obj)); //expected output: "cool"


推荐阅读