如何在JavaScript中列出对象的所有方法

了解如何使用JavaScript对象方法获取数组

我们可以使用Object.getOwnPropertyNames()函数以获取链接到对象的所有属性名称。

然后,我们可以过滤结果数组,以仅包含该属性名称(如果它是一个函数)。

我们通过使用来确定它是否是一个函数typeof在上面。

例如,这是我们可能如何创建实用程序函数来执行所需的操作:

getMethods = (obj) => Object.getOwnPropertyNames(obj).filter(item => typeof obj[item] === 'function')

这仅列出在该特定对象上定义的方法,而不列出其原型链中定义的任何方法。

为此,我们必须采取略有不同的方法。我们必须首先迭代原型链,然后在数组中列出所有属性。然后,我们检查每个属性是否都是一个函数。

确保在浏览原型链时不重复方法的简单方法(例如constructor始终存在),我们使用Set数据结构来确保值是唯一的:

const getMethods = (obj) => {
  let properties = new Set()
  let currentObj = obj
  do {
    Object.getOwnPropertyNames(currentObj).map(item => properties.add(item))
  } while ((currentObj = Object.getPrototypeOf(currentObj)))
  return [...properties.keys()].filter(item => typeof obj[item] === 'function')
}

用法示例:

getMethods("")
getMethods(new String('test'))
getMethods({})
getMethods(Date.prototype)

免费下载我的JavaScript初学者手册


更多js教程: