オブジェクトからすべてのメソッドを取得するメソッドまたはプロパティはありますか?例えば:
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;
}
技術的にjavascriptオブジェクトにはメソッドがないことに注意してください。これらにはプロパティがあり、その一部は関数オブジェクトです。つまり、プロパティを列挙できるように、オブジェクトのメソッドを列挙できます。これ(またはこれに近いもの)が機能するはずです:
var bar
for (bar in foo)
{
console.log("Foo has property " + bar);
}
オブジェクトの一部のプロパティは列挙できないため、オブジェクトにevery関数を見つけることができないため、これには問題があります。
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のみを取得するため、プロトタイプチェーンの他の場所で見つかったプロパティは返されないことに注意してください。しかし、それはあなたのリクエストではないようですので、このアプローチで十分だと思います。
enumerableプロパティのみを表示したい場合は、代わりに 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"]
var funcs = []
for(var name in myObject) {
if(typeof myObject[name] === 'function') {
funcs.Push(name)
}
}
私はセミコロンなしで電話をしています:)が、それは一般的な考え方です。
最良の方法は次のとおりです。
let methods = Object.getOwnPropertyNames(yourobject);
console.log(methods)
es6でのみ「let」を使用し、代わりに「var」を使用します
var methods = [];
for (var key in foo.prototype) {
if (typeof foo.prototype[key] === "function") {
methods.Push(key);
}
}
コンストラクタのプロトタイプを単純にループして、すべてのメソッドを抽出できます。
私にとって、最終的な拡張クラスのメソッドを取得する唯一の信頼できる方法は、次のようにすることでした。
function getMethodsOf(obj){
const methods = {}
Object.getOwnPropertyNames( Object.getPrototypeOf(obj) ).forEach(methodName => {
methods[methodName] = obj[methodName]
})
return methods
}
メソッド名を取得します。
var getMethodNames = function (obj) {
return (Object.getOwnPropertyNames(obj).filter(function (key) {
return obj[key] && (typeof obj[key] === "function");
}));
};
または、メソッドを取得します。
var getMethods = function (obj) {
return (Object.getOwnPropertyNames(obj).filter(function (key) {
return obj[key] && (typeof obj[key] === "function");
})).map(function (key) {
return obj[key];
});
};
Chromeはkeys(foo.prototype)
です。 ["a", "b"]
を返します。
参照: https://developer.chrome.com/devtools/docs/commandline-api#keysobject
後の編集:(大きなオブジェクトの場合)すばやくコピーする必要がある場合は、copy(keys(foo.prototype))
を実行すると、クリップボードに保存されます。