以编程方式调用对象中的所有函数?(Javascript)

以编程方式调用对象中的所有函数?(Javascript),javascript,function,object,ecmascript-6,Javascript,Function,Object,Ecmascript 6,正如标题所述,有没有一种方法可以通过编程方式调用对象中的所有函数?它们不必按特定的顺序调用,它们之间也没有任何状态依赖于彼此。我最初尝试的似乎最符合逻辑(至少对我来说)是 但这只是在事件()中结束,而不是函数错误。到目前为止,对象中没有足够的事件让我感到太麻烦,不仅仅是手动调用它们,而且很快就会有大约20个事件,它们需要在多个位置注册,我也想知道是否有可能:)for..in循环迭代属性名,而不是值。如果某个对象的某些值是函数,并且您希望调用这些函数,则应迭代这些值,并确保首先执行typeof检查

正如标题所述,有没有一种方法可以通过编程方式调用对象中的所有函数?它们不必按特定的顺序调用,它们之间也没有任何状态依赖于彼此。我最初尝试的似乎最符合逻辑(至少对我来说)是


但这只是在事件()中结束,而不是函数错误。到目前为止,对象中没有足够的事件让我感到太麻烦,不仅仅是手动调用它们,而且很快就会有大约20个事件,它们需要在多个位置注册,我也想知道是否有可能:)

for..in
循环迭代属性名,而不是值。如果某个对象的某些值是函数,并且您希望调用这些函数,则应迭代这些值,并确保首先执行
typeof
检查,以确保不调用非函数:

var对象={
eventOne(){
console.log(“eventOne”)
},
事件二(){
console.log(“eventTwo”)
},
};
Object.values(Object.forEach)((val)=>{
if(typeof val==='function')val();

});
for..in
循环迭代属性名,而不是值。如果某个对象的某些值是函数,并且您希望调用这些函数,则应迭代这些值,并确保首先执行
typeof
检查,以确保不调用非函数:

var对象={
eventOne(){
console.log(“eventOne”)
},
事件二(){
console.log(“eventTwo”)
},
};
Object.values(Object.forEach)((val)=>{
if(typeof val==='function')val();

});
事件
是属性名称。使用
对象[propertyName]()

var对象={
eventOne(){
console.log(“eventOne”)
},
事件二(){
console.log(“eventTwo”)
}
}
//这是我给他们打电话的原因
for(对象中的事件){
对象[事件]();

}
事件
是属性名称。使用
对象[propertyName]()

var对象={
eventOne(){
console.log(“eventOne”)
},
事件二(){
console.log(“eventTwo”)
}
}
//这是我给他们打电话的原因
for(对象中的事件){
对象[事件]();

}
迭代并调用值而不是键。检查类型是否为函数。迭代并调用值而不是键。检查类型是否是函数。我不知道为什么我以前没有想到这一点,因为这与Python中的工作方式相同。谢谢你@Dannyconter注意到,当使用
Object.values
Object.keys
(使用类似
Object[key]()
)以及当方法使用
this
时会有不同,因为当仅使用
val()
时,
对象的上下文会丢失,而
对象[key]()
或,或者,
val.call(object)
@Xufox我知道这一点,幸运的是没有任何事件使用
这个
,所以这不是问题。谢谢你!我不知道为什么我以前没有想到这一点,因为这与Python中的工作方式相同。谢谢你@Dannyconter注意到,当使用
Object.values
Object.keys
(使用类似
Object[key]()
)以及当方法使用
this
时会有不同,因为当仅使用
val()
时,
对象的上下文会丢失,而
对象[key]()
或,或者,
val.call(object)
@Xufox我知道这一点,幸运的是没有任何事件使用
这个
,所以这不是问题。谢谢你!
var object = {
    eventOne(){
        console.log("eventOne")
    },
    eventTwo(){
      console.log("eventTwo")
    },
    .......more events
}
//and then this for calling them
for(event in object){
  event();
}