let func = new Function ([arg1, arg2, ...argN], functionBody);
其中,arg1, arg2, …, argn 为函数的参数列表,functionBody 为函数体的字符串表示。当调用 new Function() 函数时,JavaScript 引擎会将 arg1, arg2, …, argn 所表示的参数和 functionBody 所表示的函数体组合成一个新的函数对象,并将该对象返回。
const add = new Function('a', 'b', 'return a + b;');
console.log(add(2, 3)); // 5
// 示例数据
const FormData = reactive({
feeTotal: 1000,
res: ''
})
/**
* 使用new Function 执行前端js脚本
* @param funBody 函数体
*/
function customeFun(funBody: string) {
if (!!funBody) {
/**
* new Function() 构造函数可以接受多个字符串参数作为函数的参数和函数体
* new Function ([arg1[, arg2[, ...argn]],] functionBody)
*/
let customFunc = new Function('FormData', funBody)
return customFunc(FormData)
}
return ''
}
// 执行自定义js函数
function handleClick() {
// 函数体
let funBody= "if(FormData.feeTotal>500) { return '费用金额异常!'} else { return ‘金额有效!’;}";
let calcResult = customeFun(funBody)
console.log(calcResult)
}
//调用方法
handleClick();// 费用金额异常!
// 如果使用空对象,或对象属性不存在会报语法错误
let funbody="if(FormData.a.d) { return true} else { return false}"
//此时由于a.d属性不存在,会导致函数执行异常,此时可通过?.解决属性不确定引起的语法异常
let funbod="if(FormData?.a?.d) { return true} else { return false}"
console.log(customeFun(funBody)) // false