获取使用参数的函数构造函数

Get Function constructor to work with arguments?

本文关键字:函数 构造函数 参数 获取      更新时间:2023-09-26

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

故事是这样的:

由于Function constructor优于eval方式,我已经管理(jsbin)以其名称

获取我的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))
}

但是,我希望数字作为参数发送给Function函数。

所以,我试着更换:( jsbin # 2 )

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

但它警告"string"。(这是正确的,因为我实际上是发送一个字符串)。

问题:

如何让第一个代码工作 Function constructor参数?

换句话说,我希望能够将数字作为参数/字符串发送给Function构造函数,因此它将返回正则表达式。

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

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

的补充
function (a) {
    return eval("my"+a+"Pattern");
}

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

但是你知道不要使用它们:-)

千万不要。太可怕了。

你没有告诉我们你想做什么,但我相信它是沿着这条线:

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构造函数。