You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向JavaScript Function构造函数注入自定义函数callpaul()?

问题分析与解决

你的问题出在传给Function构造函数的callpaul参数类型错误。

你把函数代码以字符串形式(function callpaul (p){return 'hi'+p})传入,但Function构造函数的前几个参数是「函数体内可用的变量名」,对应的实参需要是变量的实际值——这里你要传的是一个函数对象,而非字符串版的函数代码。当你传字符串时,函数体内的callpaul会变成一个字符串值,尝试调用字符串自然会触发错误。

修正后的代码如下:

let fil={}
let trans={val:"fil.res=[1,2].join('&')"}

console.log(`WORKS------`)
Function('fil', '"use strict";return (' + trans.val + ')')(fil);
console.log({fil})

console.log(`FIXED-----`)
trans={val:"fil.res=callpaul('a')"}
// 直接定义函数对象,而非传字符串
function callpaul(p) { return 'hi' + p }
Function('callpaul','fil', '"use strict";return (' + trans.val + ')')(callpaul, fil);
console.log({fil})

运行这段代码后,fil.res会被正确赋值为"hia",因为此时callpaul是一个可正常调用的函数对象,能在Function构造的函数体内执行。

如果非要用字符串形式的函数代码,你需要在Function的函数体内先将字符串解析为函数(比如用eval),但这种方式存在安全风险,不推荐使用。

内容的提问来源于stack exchange,提问作者Rilcon42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 03:55:16