Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用toString方法时,有没有方法计算函数中不是函数参数的变量?_Javascript_Node.js_Function_Eval - Fatal编程技术网

Javascript 调用toString方法时,有没有方法计算函数中不是函数参数的变量?

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.

我正在使用nodejs生成PDF文件。我正在生成表,所以对于某些列,我需要发送格式化函数

例如,如果行具有属性
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或

就我个人而言,我觉得有一种更好的方法可以做到这一点,但我想不出任何不彻底检查整个体系结构的快速修复方法。我想如果它对反应/角度等足够好,它应该对你足够好