Javascript 调用toString方法时,有没有方法计算函数中不是函数参数的变量?
我正在使用nodejs生成PDF文件。我正在生成表,所以对于某些列,我需要发送格式化函数 例如,如果行具有属性Javascript 调用toString方法时,有没有方法计算函数中不是函数参数的变量?,javascript,node.js,function,eval,Javascript,Node.js,Function,Eval,我正在使用nodejs生成PDF文件。我正在生成表,所以对于某些列,我需要发送格式化函数 例如,如果行具有属性employee,其值可以类似于: {id:1,姓:“约翰”,姓:“约翰逊”}, 为了显示此列,我使用以下格式化功能: employee=>`${employee.firstName}${employee.lastName}` 因此,我将这个函数作为字符串发送到nodejs后端。在此函数上调用toString,将从上面返回带引号的相同文本: “employee=>`${employee.
employee
,其值可以类似于:
{id:1,姓:“约翰”,姓:“约翰逊”}
,
为了显示此列,我使用以下格式化功能:
employee=>`${employee.firstName}${employee.lastName}`
因此,我将这个函数作为字符串发送到nodejs后端。在此函数上调用toString
,将从上面返回带引号的相同文本:
“employee=>`${employee.firstName}${employee.lastName}`”
然后使用从数据库中获取的参数执行此函数。我通过调用eval
eval(`(${fnString})({id:1,firstName:'Test',lastName:'Test'})`)
当一个函数中只有变量是它的参数时,这就很好了
这就是我的问题: 假设我有这样的代码:
const prefix = 'X'
const fn = employee => `${prefix} ${employee.firstName} ${employee.lastName}`
fn.toString()
计算结果为:
“employee=>`${prefix}${employee.firstName}${employee.lastName}`”
但我需要这样:
const prefix = 'X'
const fn = employee => `${prefix} ${employee.firstName} ${employee.lastName}`
“employee=>`X${employee.firstName}${employee.lastName}`
因为我无权访问前缀
变量,所以我只将函数作为字符串发送给nodejs
在调用toString方法时,有没有方法计算函数中的变量
是的,我知道,我也可以向nodejs发送前缀,但这不是一个好的解决方案,有时格式化函数可能依赖于函数定义范围内的许多变量
是的,我知道我不应该使用eval,快速而肮脏的解决方案是简单地使用字符串操作并发明自己的语法:
const fn = employee => `%PREFIX% ${employee.firstName} ${employee.lastName}`
let fnString = fn.toString();
fnString = fnString.replace('%PREFIX%', prefix);
基本上,你是在发明自己的模板语言,比如OrReact's或
就我个人而言,我觉得有一种更好的方法可以做到这一点,但我想不出任何不彻底检查整个体系结构的快速修复方法。我想如果它对反应/角度等足够好,它应该对你足够好