不用eval怎么把字符串的箭头函数的转为函数?

问题

不用eval怎么把字符串的箭头函数的转为函数d

原数据

      var data = {
        listeners: {
          change: "(val) => {  console.log(val); }",
        },
      };

期望

转换成不带双引号的

      var data = {
        listeners: {
          change: (val) => {  console.log(val); },
        },
      };
阅读 781
1 个回答

(更新)不用eval方法,可以使用'new function'方法,

var data = {
    listeners: {
        change: "(val) => {  console.log(val); }",
        other: "function(val) { console.log('ES5 function:', val); }"
    },
};

function stringToFunction(fnStr) {
    if (/^function\s*\(/.test(fnStr)) {
        // ES5 function expression
        return new Function('return ' + fnStr)();
    } else {
        // Assume arrow function
        let params = fnStr.substring(fnStr.indexOf("(") + 1, fnStr.indexOf(")")).split(",");
        let body = fnStr.substring(fnStr.indexOf("{") + 1, fnStr.lastIndexOf("}"));
        return new Function(...params, body);
    }
}
// 调用函数方法
data.listeners.change = stringToFunction(data.listeners.change);
data.listeners.other = stringToFunction(data.listeners.other);

// 测试
data.listeners.change('Hello World'); // 输出 "Hello World"
data.listeners.other('Hello World'); // 输出 "ES5 function: Hello World"
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题