【问题标题】:Programmatically Call All Functions In Object? (Javascript)以编程方式调用对象中的所有函数? (Javascript)
【发布时间】:2019-02-08 22:32:24
【问题描述】:

正如标题所述,有没有办法以编程方式调用对象中的所有函数?它们不必按一定的顺序被调用,而且它们中的任何一个都不会在任何状态等方面相互依赖。我最初尝试过的似乎最合乎逻辑的(至少对我而言)是

var object = {
    eventOne(){
        console.log("eventOne")
    },
    eventTwo(){
      console.log("eventTwo")
    },
    .......more events
}
//and then this for calling them
for(event in object){
  event();
}

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

【问题讨论】:

  • 迭代并调用值而不是键。检查类型是否为函数。

标签: javascript function object ecmascript-6


【解决方案1】:

for..in 循环遍历属性名称,而不是值。如果某个对象的某些值是函数,并且您想调用这些函数,则改为迭代 values,并确保首先进行typeof 检查以确保您不调用 non -功能:

var object = {
    eventOne(){
        console.log("eventOne")
    },
    eventTwo(){
      console.log("eventTwo")
    },
};
Object.values(object).forEach((val) => {
  if (typeof val === 'function') val();
});

【讨论】:

  • 我不知道为什么我以前没有想到这一点,因为这与它在 Python 中的工作方式相同。欣赏!
  • @DannyCanter 请注意,使用Object.valuesObject.keys(类似object[key]())以及方法使用this 时会有所不同,因为仅使用@987654328 时@ object 上下文丢失,object[key]()val.call(object) 不会发生这种情况。
  • @Xufox 我知道这一点,幸运的是没有一个事件使用this,所以这不是问题。不过谢谢!
【解决方案2】:

event 是属性名称。使用object[propertyName]()

var object = {
    eventOne(){
        console.log("eventOne")
    },
    eventTwo(){
      console.log("eventTwo")
    }
}
//and then this for calling them
for(event in object){
 object[ event]();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-25
    • 2017-01-14
    • 2015-10-22
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 2019-01-27
    相关资源
    最近更新 更多