如何遍历JavaScript对象中的所有方法并执行?
光阴似箭催人老,日月如移越少年。
思路跟楼上的差不多,因为你要遍历的是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](); }
javascript
var 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](); }
// 仅枚举自有可枚举属性(own property && enumerable property) Object.keys(o).forEach(function(prop) { typeof o[prop] === 'function' && setTimeout(o[prop].bind(o), 0); });
1.遍历对象 2.判断是否为方法 3.加入执行队列 4.判断结束,遍历执行队列 5.执行执行队列
之前想过的,不过具体通过 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。写了一个简单的例子,你可以参考一下:
1.遍历对象
2.判断是否为方法
3.加入执行队列
4.判断结束,遍历执行队列
5.执行执行队列
之前想过的,不过具体通过 apply 将 this 重指向,并传入参数argument。