[javascript] 객체의 메소드를 얻는 방법?

객체에서 모든 메소드를 가져 오는 방법이나 속성이 있습니까? 예를 들면 :

function foo() {}
foo.prototype.a = function() {}
foo.prototype.b = function() {}

foo.get_methods(); // returns ['a', 'b'];

업데이트 : Jquery에 이와 같은 방법이 있습니까?

감사합니다.



답변

function getMethods(obj)
{
    var res = [];
    for(var m in obj) {
        if(typeof obj[m] == "function") {
            res.push(m)
        }
    }
    return res;
}


답변

기술적으로 자바 스크립트 개체에는 메서드가 없습니다. 그들은 속성을 가지고 있으며, 그 중 일부는 함수 객체 일 수 있습니다. 즉, 속성을 열거 할 수있는 것처럼 객체의 메서드를 열거 할 수 있습니다. 이것은 (또는 이와 비슷한) 작동합니다.

var bar
for (bar in foo)
{
    console.log("Foo has property " + bar);
}

개체의 일부 속성은 열거 할 수 없으므로 개체의 모든 기능 을 찾을 수 없기 때문에 복잡 합니다.


답변

를 사용 console.dir(object)하여 해당 개체 속성을 콘솔에 쓸 수 있습니다 .


답변

최신 브라우저에서는 Object.getOwnPropertyNames개체의 모든 속성 (열거 가능 및 열거 불가능)을 가져 오는 데 사용할 수 있습니다 . 예를 들면 :

function Person ( age, name ) {
    this.age = age;
    this.name = name;
}

Person.prototype.greet = function () {
    return "My name is " + this.name;
};

Person.prototype.age = function () {
    this.age = this.age + 1;
};

// ["constructor", "greet", "age"]
Object.getOwnPropertyNames( Person.prototype );

이것은 own-properties 만 검색 하므로 프로토 타입 체인의 다른 곳에서 찾은 속성은 반환하지 않습니다. 그러나 그것은 귀하의 요청으로 보이지 않으므로이 접근 방식으로 충분하다고 가정합니다.

당신은 단지처럼보고 싶다면 열거 속성을 대신 사용할 수 있습니다 Object.keys. 이것은 열거 할 수없는 constructor속성을 뺀 동일한 컬렉션을 반환합니다 .


답변

브라우저의 개발자 도구 (F12)를 사용하여 객체의 프로토 타입 체인에서 메서드를 검사 할 수 있습니다.

  console.log(yourJSObject);

또는 더 직접

  console.dir(yourJSObject.__proto__);


답변

ES6에서 :

let myObj   = {myFn : function() {}, tamato: true};
let allKeys = Object.keys(myObj);
let fnKeys  = allKeys.filter(key => typeof myObj[key] == 'function');
console.log(fnKeys);
// output: ["myFn"]


답변

저에게있어 최종 확장 클래스의 메서드를 얻는 유일한 방법은 다음과 같이하는 것입니다.

function getMethodsOf(obj){
  const methods = {}
  Object.getOwnPropertyNames( Object.getPrototypeOf(obj) ).forEach(methodName => {
    methods[methodName] = obj[methodName]
  })
  return methods
}