我有一个对象定义了一堆这样的函数:
myObject = {
"item 1": function() {
return "I'm item 1";
},
"item 2": function() {
return "I'm item 2";
}
};
我想编写一个函数来调用此对象中定义的所有函数,而不必知道函数的名称或函数的数量。这可能吗?
答案 0 :(得分:1)
在ECMAScript> = 5.1中,您可以使用 for .. in 构造。
obj = {
test : function() {
console.log("test called");
}
};
for(idx in obj) {
obj[idx]();
}
您可能想要检查该属性实际上是一个函数。
答案 1 :(得分:0)
您可以先使用for-in loop浏览每个对象属性,然后执行此操作。然后,在检查该值是否为函数后,您可以调用它。
for (var key in obj) {
if (typeof obj[key] === 'function') {
obj[key]();
}
}
答案 2 :(得分:0)
您可以根据需要使用Object.keys
或for-in循环。
Object.keys(obj); // ==> ["item-1", "item-2"]
Object.keys(obj).forEach(function (key) {
var fn = obj[key];
fn();
});
// or with a for-in loop
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
obj[key]();
}
}
使用Object.keys
可以说有点清楚,但for-in循环具有更好的浏览器兼容性和可能的性能。有关JavaScript中对象枚举的更一般比较,请参阅此问题How do I enumerate the properties of a JavaScript object?。