javascript之函数动态调用
2015-07-13 15:53
639 查看
jacascript的使用异常灵活,但是呢,也经常会出现各种不安全的因素,函数动态调用就是其中一个例子。
举个例子, 假设现在我有这样100个函数:
var fun1 = function () {
};
var fun2 = function () {
};
var fun3 = function () {
};
....
var fun100 = function () {
};
我需要从第一个函数执行到最后一个,怎么办呢?难道是这样?
fun1();
fun2();
fun3();
...
fun100();
很明显,绝对不是这样,会调用函数调用到死啊。那很多人会想到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]();
}
这样就简单地解决了动态调用的问题。
举个例子, 假设现在我有这样100个函数:
var fun1 = function () {
};
var fun2 = function () {
};
var fun3 = function () {
};
....
var fun100 = function () {
};
我需要从第一个函数执行到最后一个,怎么办呢?难道是这样?
fun1();
fun2();
fun3();
...
fun100();
很明显,绝对不是这样,会调用函数调用到死啊。那很多人会想到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]();
}
这样就简单地解决了动态调用的问题。
相关文章推荐
- MonkeyTalk的JavaScript API
- js获取select字段值的方法
- js中子窗口与父窗口的互操作
- JavaScript之变量类型判断
- Fancytree Javascript Tree TreeTable 树介绍和使用
- 七步从Angular.JS菜鸟到专家(2):Scopes
- JSON.parse()和JSON.stringify()
- Three.js 的JSON format 3 中DbgColor, DbgIndex, DbgName的含义
- js中splice()
- JS高级程序设计3-基本概念
- JS验证身份证、营业执照、组织机构代码等
- lydsy1013: [JSOI2008]球形空间产生器sphere 高斯消元
- 利用JS实现简单的瀑布流效果
- JS dialog弹窗
- JSOUP获取网页数据返回403错误(403 error loading URL,connection类)
- JavaScript slice() 方法
- javascript用正则表达式获取cookie值
- velocity.js实现页面滚动切换效果
- js跨域及解决方案
- JS 异步加载