JavaScript根据函数名字符串调用函数的方法

最近遇到一个问题,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架构的应用”里面做到自动路由分发的核心代码。

 

Tonitech版权所有 | 转载请注明出处: http://www.tonitech.com/2213.html

《JavaScript根据函数名字符串调用函数的方法》有1个想法

发表评论