Cómo enumerar todos los métodos de un objeto en JavaScript

Descubra cómo obtener una matriz con los métodos de un objeto de JavaScript

Podemos usar elObject.getOwnPropertyNames()función para obtener todos los nombres de propiedad vinculados a un objeto.

Luego, podemos filtrar la matriz resultante, para incluir solo ese nombre de propiedad si es una función.

Determinamos si es una función usandotypeofen eso.

Por ejemplo, así es como podríamos crear una función de utilidad para hacer lo que necesitamos:

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

Esto enumera solo los métodos definidos en ese objeto específico, no cualquier método definido en su cadena de prototipos.

Para ello debemos tomar una ruta ligeramente diferente. Primero debemos iterar la cadena del prototipo y listamos todas las propiedades en una matriz. Luego verificamos si cada propiedad es una función.

Una manera fácil de asegurarnos de no duplicar métodos mientras navegamos por la cadena de prototipos (comoconstructorque siempre está presente), utilizamos una estructura de datos de conjunto que garantiza que los valores sean únicos:

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')
}

Uso de ejemplo:

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

Más tutoriales de js: