在JavaScript中,我有一个字符串形式的函数名。如何将其转换为函数指针,以便稍后调用?
根据具体情况,我可能还需要向该方法传递各种参数。
其中一些函数可能采用namespace.namespace.function(args[...])的形式。
发布于 2019-12-08 13:45:32
人们一直说eval是危险和邪恶的,因为它可以运行任何任意的代码。但是,如果您将eval与白名单方法一起使用,假设您知道所有可能需要提前运行的函数名,那么eval就不再是一个安全问题,因为输入不再是而不是任意的。白名单是一种很好的、频繁的安全模式。下面是一个例子:
function runDynamicFn(fnName, ...args) {
// can also be fed from a tightly controlled config
const allowedFnNames = ['fn1', 'ns1.ns2.fn3', 'ns4.fn4'];
return allowedFnNames.includes(fnName) ? eval(fnName)(...args) : undefined;
}
// test function:
function fn1(a) {
console.log('fn1 called with', a)
}
runDynamicFn('alert("got you!")')
runDynamicFn('fn1', 'foo')
https://stackoverflow.com/questions/359788
复制相似问题