我正在寻找一种从js代码字符串中按名称获取函数声明体的方法。我在Nodejs环境中。 我们说我有一些spaghetti.js文件。我可以把它读成一个字符串
const allJs = fs.readFileSync('spaghetti.js');
现在我需要一个接收该字符串和函数名的函数,并返回一个包含{ }
之间所有内容的字符串。
像这样的东西
allJs = 'let a=1; const b=[2, 3]; function cook(items){return items}; cook(b)';
parseFunction(allJs, 'cook');//'return items'
输入js的复杂性不受限制。
我试图找到一个npm模块,但没有运气。
答案 0 :(得分:1)
答案 1 :(得分:0)
可以使用本机eval()
方法在本地评估String
。但请记住,eval
is a form of evil!
如果上面的parseFunction()
依赖于something like this,那么正在使用全局Function constructor
并且'new'函数绑定到该操作的返回值(因此返回价值本身需要被称为)。
实现这一目标的一种简单方法可能是做这样的事情......
var funcString = 'var a = 1, b = 3;';
funcString += 'function summit(){return a + b;}';
funcString += 'return summit();';
function makeNewFunc(str) {
return new Function(str);
}
var newFunc = makeNewFunc( funcString );
console.log('newFunc:',newFunc);
//-> newFunc: function anonymous()
console.log('newFunc():',newFunc());
//-> newFunc(): 4
这演示了如何从String
片段创建和调用函数。 (编辑:Turning something like that into a Node module is a simple matter);
希望有所帮助。 :)