如何在JavaScript中将字符串转换为函数引用
How do I convert a string to a function reference in JavaScript?
我想要的是将函数的名称作为字符串传递,并将其作为对该函数的引用传递。例如,我想做这个:
var test = function(fn){
fn();
}
test(alert);
等于:
var test = function(function_as_string){
//...code that converts function_as_string to function reference fn
fn();
}
test('alert');
我该怎么做?
您从窗口对象获得函数引用:
var fn = window[function_as_string];
演示:http://jsfiddle.net/Guffa/nA6gU/
var o = {};
o.b = function b() {
alert("b");
}
o.b();
o["b"]();
若它是一个全局函数,那个么它就是window上的一个属性。
function a() {
alert("a");
}
a();
window.a();
window["a"]();
就嵌套问题而言,最好的方法是将其作为属性分配给稍后可以访问的对象。例如:
function assignInside() {
o.inside = function() {
alert("inside");
}
}
assignInside();
o["inside"]();
这一切都像小提琴一样。
PS,在这种情况下没有理由使用eval,而且有很多很好的理由可以避免eval。
使用eval获取对函数-的引用
var Namespace = {
quack: function () {console.log('quack!')}
};
function test (fnName) {
var fn = eval(fnName);
fn();
}
test('Namespace.quack')
如果你想的话,这可能会允许你传递其他参数
哦,你可能不能简单地使用window[fnName]的原因是,如果它是类似$.ajax的东西,window['$.ajax']会给你未定义的。。因此,除非你想创建一个复杂的函数来查找它是否在另一个命名空间中,否则eval是你的最佳选择。
看看eval()
函数,它将允许您提供一个字符串,该字符串的求值结果为javascript:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/eval
var test = function(fn){
eval(fn + "()");
}
test(alert);
关于MDN:评估的注意事项
eval()是一个危险的函数,它执行传递的代码具有调用者的权限。如果使用字符串运行eval()可能受到恶意方的影响,您最终可能会运行具有您的权限的用户计算机上的恶意代码网页/扩展。更重要的是,第三方代码可以看到调用eval()的范围,这可能导致攻击以类似函数不易受影响的方式。
eval()通常也比备选方案慢,因为它必须调用JS解释器,同时优化了许多其他构造通过现代JS引擎。
有一些安全(快速!)的替代方法可以代替eval()用例。
看这里:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/eval
关于:
var fn = new Function(function_as_string)
- 如何在JavaScript中将字符串转换为函数引用
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- Javascript函数,用于将数组转换为“;2-元组”;
- 使用JAVASCRIPT转换货币.可以't通过我的函数设置转换后的输入文本字段的值
- 无法传递Asp.net控件's值转换为javascript函数
- 将JSON字符串转换为函数参数
- 如何传递对'这'转换为函数
- 在Javascript中将字符串转换为函数
- 调用函数时页面未转换
- 如何在将Node异步函数转换为promise时使用Q库
- Jquery移动转换复选框在Jquery onclick函数()中第二次选中不起作用
- JavaScript Othello 左转换和右转换函数
- 无法反转此 HTML 实体转换函数
- 所有过渡完成后的转换函数链接
- 使用 Momentjs 转换函数
- 如何在 javascript 中使字符串转换函数返回值
- ExtJS:关联的idProperty's转换函数未启动
- 转换函数's参数转换为类似数组的对象
- asp到Javascript的转换函数
- 如何在Meteor.js的服务器端转换函数后设置mongo投影