最近遇到一个问题,JavaScript如何通过函数名的字符串来调用这个函数,到stackoverflow上逛了圈,收获良多,这里总结下:
如果你是要直接调用全局的函数,可以用如下方式:
//定义一个名为foo的函数 function foo() { alert(1); } //第一种调用方式 window['foo'](); //第二种调用方式 eval('foo()');
如果你想要在一个对象里面调用对象自己的属性函数,可以用如下方式:
var test = { foo : function(a) { alert(a); }, bar : function() { var property = 'foo'; var parameter = ['this is a test!']; var fn = this[property]; if(typeof fn === 'function') { fn.apply(this, parameter); } } }; test.bar();
上面这段代码是我写的一个小例子,其中的
fn.apply(this, parameter);
有几个好处,第一点就是可以让你调用的foo这个属性函数能够使用到当前的this,如果不用apply是无法调用到当前的this的。第二点就是传递参数变得很自由,如果属性函数需要传入多个参数可以用数组传入。
上面这段小代码就是我在“基于Requirejs和Backbonejs,将Zend Framework 2官方Demo改为RESTful架构的应用”里面做到自动路由分发的核心代码。
via:http://www.tonitech.com/2213.html