Javascript 让函数构造函数使用参数?

Javascript 让函数构造函数使用参数?,javascript,Javascript,我正在用函数构造函数做一些测试,只是为了学习) 故事是这样的: 由于函数构造函数是优于eval的首选方法,因此我已设法通过变量名获取了我的regex变量 var my1Pattern=/\d/ig; var my2Pattern=/\w/ig; var my3Pattern=/\d+/ig; var f=new Function( "return my"+3+"Pattern"); //3 or 2 or 1 , doesn't matter . doWork(f()) //"[obje

我正在用函数构造函数做一些测试,只是为了学习)

故事是这样的:

由于
函数构造函数
是优于
eval
的首选方法,因此我已设法通过变量名获取了我的
regex
变量

var my1Pattern=/\d/ig; 
var my2Pattern=/\w/ig;
var my3Pattern=/\d+/ig;


var f=new Function( "return my"+3+"Pattern"); //3 or 2 or 1 , doesn't matter .

doWork(f()) //"[object RegExp]"


function doWork(r)
{
   alert(Object.prototype.toString.apply(r))
}
但是,我希望将数字作为参数发送到函数ctor

因此,我尝试替换:()

但它会提醒
“字符串”
。(这是正确的,因为我实际上在发送一个字符串)

问题:

如何让第一个代码使用
函数构造函数
参数

换句话说,我希望能够将一个数字作为参数/字符串发送给函数构造函数,这样它将返回正则表达式。不需要。那太可怕了

你还没有告诉我们你想做什么,但我相信这是沿着以下思路:

var myPattern = [
   /\d/ig,
   /\w/ig,
   /\d+/ig
];

/** Apply my ith regex to str */
var f = function(str, i) {
   return str.apply(myPattern[i]);
};

console.log(f("hello!", 0));
console.log(f("hello!", 1));
console.log(f("hello!", 2));
您可以随意抱怨不希望使用数组,但这并不能改变这样一个事实,即这是正确的方法,,无论是谁向您推荐的方式都是愚蠢可笑的

我们不会通过对象名称的字符串版本获取对对象的引用,既不能使用
eval
也不能使用
函数
构造函数。

。那太可怕了

你还没有告诉我们你想做什么,但我相信这是沿着以下思路:

var myPattern = [
   /\d/ig,
   /\w/ig,
   /\d+/ig
];

/** Apply my ith regex to str */
var f = function(str, i) {
   return str.apply(myPattern[i]);
};

console.log(f("hello!", 0));
console.log(f("hello!", 1));
console.log(f("hello!", 2));
您可以随意抱怨不希望使用数组,但这并不能改变这样一个事实,即这是正确的方法,,无论是谁向您推荐的方式都是愚蠢可笑的

我们不会通过对象名称的字符串版本获取对对象的引用,既不能使用
eval
也不能使用
函数
构造函数。

function (a) {
    return eval("my"+a+"Pattern");
}
会是

function (a) {
    return new Function("return my"+a+"Pattern")();
}
但是你知道不要使用它们中的任何一个:-)

的补语

function (a) {
    return eval("my"+a+"Pattern");
}
会是

function (a) {
    return new Function("return my"+a+"Pattern")();
}

但是你知道不要使用它们中的任何一个:-)

我认为唯一的方法是使用另一个函数

var f=new Function("a", "return a")( (new Function("return my"+3+"Pattern;")() );
doWork(f)

我认为唯一的方法是使用另一个函数

var f=new Function("a", "return a")( (new Function("return my"+3+"Pattern;")() );
doWork(f)


函数
构造函数几乎不比
eval
好。不管是谁推荐的,他都是个该死的白痴。首选的方法是首先不要像JS一样运行字符串。@cHao函数构造函数没有访问全局变量的权限,而eval有。@cHao
Function
构造函数更好,因为它们阻止了对当前范围的访问-这正是询问者试图达到的目的。rays不能使用?我从未遇到过使用函数构造函数(或eval)的需要。我认为唯一的方法是使用
var f=new function(“a”,“returna”)((new function(“return my”+3+“Pattern;”)()
函数
构造函数几乎不比
eval
好。推荐它的人简直是个白痴。首选的方法是不要像JS一样运行字符串。@cHao函数构造函数不能访问全局变量,而eval有。@cHao
函数
构造函数ors更好,因为它们阻止了对当前作用域的访问—这正是询问者试图实现的—RAYS无法使用?我从未遇到过使用函数构造函数(或eval)的需要。我认为唯一的方法是使用
var f=new function(“a”,“return a”)((新函数(“return my”+3+“Pattern;”)())谢谢。现在我更了解函数构造函数了。更好的方法是使用方括号中的对象属性。例如
myArray[“lala”+“1”]
这比基于索引的r解决方案更受欢迎。不过,我还是尝试使用函数构造函数参数!类似
函数(“A”,“alert(A)”)
我知道我在问什么以及为什么。我知道其他的方法,但正如我所说的,这是为了学习。@Royi为什么这是“更好的方法”?这里有一个激动人心的想法:学习正确的做事方法。因为如果有人在它之间推另一个项目不起作用,那么对象属性将在哪里起作用。然而,你拒绝承认我想学习函数构造函数实现的事实。@Royi:是的,我是。如果你让我教你如何将我的眼睛从ir sockets,我也会拒绝你的。(顺便说一句,两者没有那么大的不同。)谢谢。现在我更了解函数构造函数。更好的方法是使用方括号中的对象属性。例如
myArray[“lala”+“1”]
这是比基于索引的r解决方案更可取的解决方案。但是,我再次尝试使用函数构造函数参数!类似于
函数(“a”,“警报(a)”;
我知道我在问什么以及为什么。我知道其他方法,但正如我所说的,这是为了学习。@Royi为什么这是“更好的方法”?这里有一个激动人心的想法:学习正确的做事方法。因为如果有人在它之间推另一个项目不起作用,那么对象属性将在哪里起作用。然而,你拒绝承认我想学习函数构造函数实现的事实。@Royi:是的,我是。如果你让我教你如何将我的眼睛从ir sockets,我也会拒绝你。(顺便说一句,两者没有那么大的不同。)你的第二个解决方案最接近我的问题。我想知道(a)参数是否可以用在函数ctor param中。(如你所知,我们可以做:
函数(“a”,“alert(a)”);
您的第二个解决方案与我的问题最接近。我想知道(a)参数是否可以用于函数ctor param。(如您所知,我们可以做:
函数(“a”,“警报(a)”);
没有说这是最佳实践解决方案,但它是唯一能回答我确切问题的解决方案。N