Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript에서 객체의 모든 메서드(멤버 함수) 목록 가져오기

JavaScript에서는 객체 참조를 인자로 받아, 해당 객체에 존재하는 모든 메서드(멤버 함수)를 배열 형태로 반환하는 함수를 작성할 수 있습니다.

여기서 중요한 조건은 함수 타입이 아닌 일반 속성(문자열, 숫자 등)은 결과에서 제외하고, 오직 메서드만 배열에 담아 반환해야 한다는 점입니다.

핵심 아이디어: Object.getOwnPropertyNames

이 문제는 Object.getOwnPropertyNames() 메서드를 활용하면 간단하게 해결할 수 있습니다.

Object.getOwnPropertyNames()는 주어진 객체에 직접 정의된 모든 속성 이름을 배열로 반환합니다. 이때 열거 가능(enumerable) 여부와 상관없이 모든 속성이 포함됩니다.

반환된 배열에 filter()를 적용하여, 값의 데이터 타입이 'function'인 속성만 남기면 원하는 메서드 목록을 얻을 수 있습니다.

구현 예제

const returnMethods = (obj = {}) => {
    const members = Object.getOwnPropertyNames(obj);
    const methods = members.filter(el => {
        return typeof obj[el] === 'function';
    })
    return methods;
};
console.log(returnMethods(Array.prototype));

코드 설명

  • Object.getOwnPropertyNames(obj): 객체가 직접 소유한 모든 속성 이름을 배열로 가져옵니다.
  • filter(el => typeof obj[el] === 'function'): 각 속성의 값 타입을 검사하여 함수인 경우만 필터링합니다.
  • 화살표 함수의 기본 매개변수(obj = {})를 사용해 인자가 누락되어도 안전하게 동작하도록 처리했습니다.

실행 결과

위 코드를 실행하면 콘솔에 Array.prototype에 정의된 모든 메서드가 출력됩니다.

[
    'constructor', 'concat', 'copyWithin',
'fill', 'find', 'findIndex', 'lastIndexOf', 'pop', 'push',
    'reverse', 'shift', 'unshift', 'slice', 'sort', 'splice',
    'includes', 'indexOf', 'join',
    'keys', 'entries', 'values',
    'forEach', 'filter', 'flat',
    'flatMap', 'map', 'every',
    'some', 'reduce', 'reduceRight',
    'toLocaleString', 'toString'
]

이처럼 Object.getOwnPropertyNames()filter()를 조합하면, 어떤 객체든 자신에게 직접 정의된 메서드만 손쉽게 추출할 수 있습니다. 프로토타입 체인까지 탐색하고 싶다면 Object.getPrototypeOf()를 반복적으로 호출하며 같은 로직을 적용하면 됩니다.