如何一次触发多个命名空间函数?

时间:2014-08-25 09:02:17

标签: javascript jquery javascript-namespaces

是否可以通过一次调用执行命名空间的所有功能?

经验:

var myApp = { 

    e : $('.js-box'),
    addStyle : function(){
    myApp.e.css('height','200');
    },
    warn : function(){
    alert('WOOOOOoooOO');
    }  
};
myApp.addStyle();
myApp.warn();

使用上面的代码可以正常工作..

我们可以通过一次调用激活addStyle并警告函数吗?

我的尝试/想法:

var myApp = { 
    workAll : function(){
        e : $('.js-box'),
        addStyle : function(){
        myApp.e.css('height','200');
        },
        warn : function(){
        alert('WOOOOOoooOO');
        }
    }    
};
myApp.workAll();

这不起作用..我怎么能这样做?

实时尝试:http://jsfiddle.net/C7JJM/82/

提前谢谢!

3 个答案:

答案 0 :(得分:1)

自动调用所有函数看起来很困难,而不会使每个函数自行调用。但是使用自定义调用者,它几乎是可能的..只需在你的第一个函数中添加另一个名为workAll的函数即可。

var myApp = { 

        e : $('.js-box'),
        addStyle : function(){
            console.log("Add style called");
            myApp.e.css('height','200');
        },
        warn : function(){
            alert('WOOOOOoooOO!!!');
        },
        runAll : function(){
            this.addStyle(); //call AddStyle
            this.warn(); //call Warn
        }
};
myApp.runAll();

在这里演示:

http://jsfiddle.net/C7JJM/84/

答案 1 :(得分:0)

尝试这个

    //http://stackoverflow.com/questions/5999998/how-can-i-check-if-a-javascript-variable-is-function-type
    function isFunction(functionToCheck) {
     var getType = {};
     return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
    }

    function executeAll(ns){
        if(ns){
        for (property in ns) {
                if (ns.hasOwnProperty(property)) {
                    var p = ns[property];
                    if (p != null && isFunction(p)) {
                        p();
                    }
                }
            }
        }
    }
   var myApp = { 

            e : $('.js-box'),
            addStyle : function(){
            myApp.e.css('height','200');
            },
            warn : function(){
            alert('WOOOOOoooOO');
                }  
    };
    executeAll(myApp)

但要注意传递给函数的参数

http://jsfiddle.net/s8ng608f/1/

答案 2 :(得分:0)

var myApp = { 
     e : $('.js-box'),

        addStyle : function(){
        myApp.e.css('height','400');
        },
        warn : function(){
        alert('WOOOOOoooOO');
        }  ,
    addstyleall:function(){this.addStyle();this.warn();}

};
myApp.addstyleall();