객체의 메소드를 얻는 방법?
객체에서 모든 메소드를 가져 오는 방법이나 속성이 있습니까? 예를 들면 :
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 );
Note that this only retrieves own-properties, so it will not return properties found elsewhere on the prototype chain. That, however, doesn't appear to be your request so I will assume this approach is sufficient.
If you would only like to see enumerable properties, you can instead use Object.keys
. This would return the same collection, minus the non-enumerable constructor
property.
The methods can be inspected in the prototype chain of the object using the browser's developer tools (F12):
console.log(yourJSObject);
or more directly
console.dir(yourJSObject.__proto__);
In 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"]
var funcs = []
for(var name in myObject) {
if(typeof myObject[name] === 'function') {
funcs.push(name)
}
}
I'm on a phone with no semi colons :) but that is the general idea.
the best way is:
let methods = Object.getOwnPropertyNames(yourobject);
console.log(methods)
use 'let' only in es6, use 'var' instead
var methods = [];
for (var key in foo.prototype) {
if (typeof foo.prototype[key] === "function") {
methods.push(key);
}
}
You can simply loop over the prototype of a constructor and extract all methods.
for me, the only reliable way to get the methods of the final extending class, was to do like this:
function getMethodsOf(obj){
const methods = {}
Object.getOwnPropertyNames( Object.getPrototypeOf(obj) ).forEach(methodName => {
methods[methodName] = obj[methodName]
})
return methods
}
In Chrome is keys(foo.prototype)
. Returns ["a", "b"]
.
See: https://developer.chrome.com/devtools/docs/commandline-api#keysobject
Later edit: If you need to copy it quick (for bigger objects), do copy(keys(foo.prototype))
and you will have it in the clipboard.
Get the Method Names:
var getMethodNames = function (obj) {
return (Object.getOwnPropertyNames(obj).filter(function (key) {
return obj[key] && (typeof obj[key] === "function");
}));
};
Or, Get the Methods:
var getMethods = function (obj) {
return (Object.getOwnPropertyNames(obj).filter(function (key) {
return obj[key] && (typeof obj[key] === "function");
})).map(function (key) {
return obj[key];
});
};
참고URL : https://stackoverflow.com/questions/5842654/how-to-get-an-objects-methods
'IT story' 카테고리의 다른 글
JFrame 최대화 창 (0) | 2020.09.18 |
---|---|
어떻게 바이트 배열을 문자열로 안전하게 변환 할 수 있습니까? (0) | 2020.09.18 |
정규식 / _ / g는 무엇을 의미합니까? (0) | 2020.09.18 |
PHP : 연관 배열 요소를 배열의 처음으로 이동 (0) | 2020.09.18 |
R 데이터 파일에서 지정한 변수 이름으로 개체를로드하려면 어떻게해야합니까? (0) | 2020.09.18 |