オブジェクトからすべてのメソッドを取得するメソッドまたはプロパティはありますか?例えば:
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;
}
for..in
方法は、標準的なアプローチです。
TypeError: '[object Object]' is not a function (evaluating 'obj(m)')
m instanceof Function
か?
技術的にはJavaScriptオブジェクトにはメソッドがないことに注意してください。それらにはプロパティがあり、その一部は関数オブジェクトである場合があります。つまり、プロパティを列挙するのと同じように、オブジェクトのメソッドを列挙することができます。これ(またはこれに近いもの)はうまくいくはずです:
var bar
for (bar in foo)
{
console.log("Foo has property " + bar);
}
オブジェクトの一部のプロパティは列挙できないため、オブジェクトのすべての関数を見つけることができないため、これには複雑さが伴います。
最近のブラウザー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
プロパティを除いたものを返します。
var funcs = []
for(var name in myObject) {
if(typeof myObject[name] === 'function') {
funcs.push(name)
}
}
私はセミコロンのない電話を使っています:)しかし、それは一般的な考えです。
var methods = [];
for (var key in foo.prototype) {
if (typeof foo.prototype[key] === "function") {
methods.push(key);
}
}
コンストラクタのプロトタイプをループして、すべてのメソッドを抽出するだけです。
最善の方法は:
let methods = Object.getOwnPropertyNames(yourobject);
console.log(methods)
es6でのみ 'let'を使用し、代わりに 'var'を使用
Chromeではですkeys(foo.prototype)
。を返します["a", "b"]
。
参照:https : //developer.chrome.com/devtools/docs/commandline-api#keysobject
後で編集する:(大きなオブジェクトの場合)すばやくコピーする必要がある場合は、コピーcopy(keys(foo.prototype))
してクリップボードに入れます。
メソッド名を取得します。
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];
});
};