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

问题

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

原数据

      var data = {

listeners: {

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

},

};

期望

转换成不带双引号的

      var data = {

listeners: {

change: (val) => { console.log(val); },

},

};


回答:

(更新)不用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"

以上是 不用eval怎么把字符串的箭头函数的转为函数? 的全部内容, 来源链接: utcz.com/p/935013.html

回到顶部