javascript中的函数数组

时间:2015-07-02 13:47:31

标签: javascript

我在每个页面都有一些JavaScript函数,我在加载jQuery后调用它们 Questions.aspx页面中的函数为afterQuestions(),Default.aspx中的函数为afterDefault(),依此类推....

在我的母版页中,我称之为:

if(typeof(afterQuestion) == 'function') afterQuestions();
if(typeof(afterDefault) == 'function') afterDefault();

随着功能数量的增长,我尝试了类似的东西:

var _fs = [After, AfterDefault,  afterSettings, afterQuestions];
for (var i = 0; i < _fs.length; i++) if (typeof (_fs[i]) == "function")  _fs[i](); 

但它并没有这样做。你能帮我解决一下如何创建一个函数数组并调用它们?

编辑:我认为没有人能够很好地阅读这个问题,因为所有功能都不会同时存在,这就是创建数组的问题。我通过将创建的函数添加到全局数组以及该数组中的循环和排除函数来解决它

1 个答案:

答案 0 :(得分:1)

如果未定义该函数,则会出现JavaScript错误,因为您尝试引用未定义的变量。原始代码中的检查类型可以解决该问题。

最好的办法是将函数命名为对象并使用点符号。

var methods = {
    After : function () {console.log("After"); },
    AfterDefault : function () {console.log("AfterDefault"); },
    afterSettings : function () {console.log("afterSettings"); }
};

var _fs = [methods.After, methods.AfterDefault,  methods.afterSettings, methods.afterQuestions];
for (var i = 0; i < _fs.length; i++) {
    if (typeof (_fs[i]) == "function")  {
       _fs[i]();
    }
}

现在,当您想要注册方法时,只需添加到方法对象即可。

methods = methods || {};
methods.afterSettings = function () {  console.log("added this in"); };

现在,如果未定义方法,则命名空间将返回undefined,并且检查不会出错。