我正在尝试将函数定义为对象的一部分,并使用相同的对象属性,但出现错误“ SyntaxError:Arg字符串尽早终止参数”
let x = {};
x.str = 'Hello Wor\nld';
x.a = /\s/g;
x.action = new Function(x.str, x.a, 'return ' + x.str + '.replace(' + x.a + ', "")');
console.log(x.action);
答案 0 :(得分:0)
除了new Function
的最后一个参数外,所有参数都应为参数名称(必须为有效的变量名称)-它们中不能有空格或为正则表达式。例如:
new Function('a', 'b', 'return a + b')
结果类似
function(a, b) {
return a + b
类似地,您当前正在做什么:
function foo(Hello Wor
ld, /\s/g) {
// ...
语法无效。
制作一个不接受任何参数的函数:
let x = {};
x.str = 'Hello Wor\nld';
x.a = /\s/g;
x.action = new Function('return `' + x.str + '`.replace(' + x.a + ', "")');
console.log(x.action());
请注意,由于x.str
是一个字符串,因此应将其括在字符串定界符中,并且由于它也包含换行符,因此应将其括在反引号中。
更好的是,根本不使用new Function
:
let x = {};
x.str = 'Hello Wor\nld';
x.a = /\s/g;
x.action = () => x.str.replace(x.a, '');
console.log(x.action());