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

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

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


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


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

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

var ent = {}; // 执行环境
var obj={}; // 包含属性方法的对象

for( item in obj){
    if(typeof obj[item] === 'function'){
        obj[item].apply(ent, arguments);
    }
}

思路跟楼上的差不多,因为你要遍历的是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]();
}
【热门文章】
【热门文章】