객체에서 모든 메소드를 가져 오는 방법이나 속성이 있습니까? 예를 들면 :
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
}