search

Home  >  Q&A  >  body text

前端 - 如何遍历JavaScript对象中的所有方法并执行?

如何遍历JavaScript对象中的所有方法并执行?

大家讲道理大家讲道理2896 days ago469

reply all(4)I'll reply

  • 阿神

    阿神2017-04-10 15:22:51

    思路跟楼上的差不多,因为你要遍历的是object对象,因此得使用for-in方法。同时考虑到object里可能嵌套着多个function,所以得使用递归查找出所有的function。写了一个简单的例子,你可以参考一下:

    javascriptvar data = {
        a : function(){
            console.log('a');
        },
        elem : {
            b : function(){
                console.log('b');
            },
            c : function(){
                console.log('c');
            },
            elem : {
                d : function(){
                    console.log('d');
                }
            }
        },
        e : function(){
            console.log('e');
        }
    }
    function getAllFunc(data){
        var stack = [];
        for(var key in data){
            if(typeof data[key]=='function'){
                // 若当前属性是function,则进行存储
                stack.push(data[key]);
            }else if(typeof data[key]=='object'){
                // 若当前属性是object,则进行递归检查
                stack = stack.concat(getAllFunc(data[key]));
            }
            // 其他类型不进行操作
        }
        return stack;
    }
    var result = getAllFunc(data);
    for(var i=0, t=result.length; i<t; i++){
        result[i]();
    }
    

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:22:51

    // 仅枚举自有可枚举属性(own property && enumerable property)
    Object.keys(o).forEach(function(prop) {
        typeof o[prop] === 'function' && setTimeout(o[prop].bind(o), 0);
    });
    

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:22:51

    1.遍历对象
    2.判断是否为方法
    3.加入执行队列
    4.判断结束,遍历执行队列
    5.执行执行队列

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 15:22:51

    之前想过的,不过具体通过 apply 将 this 重指向,并传入参数argument。

    var ent = {}; // 执行环境
    var obj={}; // 包含属性方法的对象
    
    for( item in obj){
        if(typeof obj[item] === 'function'){
            obj[item].apply(ent, arguments);
        }
    }
    

    reply
    0
  • Cancelreply