jacascript的使用异常灵活,但是呢,也经常会出现各种不安全的因素,函数动态调用就是其中一个例子。
举个例子, 假设现在我有这样100个函数 :
举个例子, 假设现在我有这样100个函数 :
var fun1 = function () {
};
var fun2 = function () {
};
var fun3 = function () {
};
....
var fun100 = function () {
};
我需要从第一个函数执行到最后一个,怎么办呢?难道是这样?
fun1();
我需要从第一个函数执行到最后一个,怎么办呢?难道是这样?
fun1();
fun2();
fun3();
...
fun100();
很明显,绝对不是这样,会调用函数调用到死啊。那很多人会想到eval函数( eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。 )
那就可以这样用:
看起来好像不错,几行代码就调用了所有的函数,但是大家应该只eval是魔鬼,非常非常地不推荐使用eval,那么问题来了,不能用eval,那咋办呢?网上又有很多大神给出了eval的替代方法:
这样好像不错,没用eval,又实现了动态调用,但是真的就这样吗?其实,一直都想复杂了,万能的this就可以解决这个问题了。
瞧瞧:
定义的时候加上前面那句话,使用的时候只需这样:
这样就简单地解决了动态调用的问题。
很明显,绝对不是这样,会调用函数调用到死啊。那很多人会想到eval函数( eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。 )
那就可以这样用:
var i;
for (i = 1; i <= 100; ++i) {
eval("fun" + i)();
}
看起来好像不错,几行代码就调用了所有的函数,但是大家应该只eval是魔鬼,非常非常地不推荐使用eval,那么问题来了,不能用eval,那咋办呢?网上又有很多大神给出了eval的替代方法:
var strToObj = function (str) {
return new Function("return " + str)();
};
var i;
for (i = 1; i <= 100; ++i) {
strToObj("fun" + i)();
}
这样好像不错,没用eval,又实现了动态调用,但是真的就这样吗?其实,一直都想复杂了,万能的this就可以解决这个问题了。
瞧瞧:
global = this;
var fun1 = function () {
};
var fun2 = function () {
};
var fun3 = function () {
};
....
var fun100 = function () {
};
定义的时候加上前面那句话,使用的时候只需这样:
var i;
for (i = 1; i <= 100; ++i) {
global["fun" + i]();
}
这样就简单地解决了动态调用的问题。