获取使用参数的函数构造函数
Get Function constructor to work with arguments?
我正在用函数构造器做一些测试,只是为了学习)
故事是这样的:
由于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
构造函数。
相关文章:
- 对使用函数构造函数创建的函数的内部引用
- 获取使用函数构造函数创建的函数的名称
- JavaScript 访问函数构造函数中的“this”
- JavaScript中的对象与函数构造函数
- 为什么实例构造函数指向最上面的函数构造函数对象
- 是否可以在函数构造函数中识别哪个对象调用它,并在错误的对象调用时中止创建
- Javascript新函数构造函数没有't返回所需的值
- Crockford 伪经典继承部分中的函数构造函数
- Jasmine:如何在ES6上监视导入的函数/构造函数
- 请解释有关 JavaScript 中的原型属性和函数构造函数的详细信息
- 主干.js - n捕获异常:语法错误:函数构造函数:无法编译函数
- 为什么使用函数构造函数创建的 Javascript 函数无法访问在其外部定义的其他函数
- 从全局范围内的另一个函数 - Javascript 调用函数构造函数的方法
- Javascript - 在闭包中使用函数构造函数是一个坏主意吗?
- Javascript - 为什么“函数构造函数”被称为“函数构造函数”
- 高级语法:“0[构造函数][构造函数]()()” - 它如何计算代码
- 函数构造函数中的局部变量
- 带有setTimeout的函数构造函数
- 如何使用exports或module.exports将函数构造函数对象方法与原型封装在单个模块中
- 如何正确映射函数构造函数