如何调用对象字面量中定义的所有命名函数?
批量调用对象字面量中的所有函数
嘿,这个问题我之前也踩过坑!对象确实不像数组自带length属性可以直接循环,不过有好几种简单的办法能批量调用这些函数,我给你分享几个常用方案:
方案1:使用for...in循环(兼容性最好)
这是最经典的遍历对象属性的方式,记得加上hasOwnProperty判断,避免不小心调用到原型链上继承来的属性:
var functions = { function1: function(){ /* Important stuff */ }, function2: function(){ /* Important stuff */ }, functionN: function(){ /* Important stuff */ } }; for (var key in functions) { // 确保当前属性是对象自身定义的,不是原型链来的 if (functions.hasOwnProperty(key)) { // 通过键名调用对应的函数 functions[key](); } }
方案2:用Object.keys()遍历键名(更简洁)
Object.keys()会返回一个包含对象所有自身可枚举属性键名的数组,之后就可以用数组的forEach来遍历调用:
Object.keys(functions).forEach(key => { functions[key](); });
方案3:用Object.values()直接获取函数(最直观)
如果你不需要键名,只想直接拿到所有函数,Object.values()可以直接返回对象自身可枚举属性的值组成的数组,直接遍历调用就行:
Object.values(functions).forEach(fn => { fn(); });
额外提示:防错处理
如果你的对象里可能混有非函数类型的属性,建议加个类型判断,避免调用时报错:
Object.values(functions).forEach(item => { // 先判断是不是函数,再调用 if (typeof item === 'function') { item(); } });
内容的提问来源于stack exchange,提问作者Overload
相关产品推荐
相关产品推荐

