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

563 阅读1分钟

了解如何用一个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)