Heim > Fragen und Antworten > Hauptteil
阿神2017-04-10 15:22:51
思路跟楼上的差不多,因为你要遍历的是object对象,因此得使用for-in方法。同时考虑到object里可能嵌套着多个function,所以得使用递归查找出所有的function。写了一个简单的例子,你可以参考一下:
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](); }
伊谢尔伦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);
});
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);
}
}