如何获取对象的方法?

有没有一种方法或特性从对象中获取所有方法? 例如:

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对象没有方法。 他们有属性,其中一些可能是function对象。 这意味着您可以像枚举属性一样枚举对象中的方法。 这(或接近这个)应该工作:

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

有这样的复杂,因为对象的一些属性不枚举,所以你将无法find对象的每个function。

您可以使用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 ); 

请注意,这只会检索自己的属性 ,所以它不会返回在原型链上其他地方find的属性。 但是,这似乎不是你的要求,所以我会认为这种做法是足够的。

如果您只想查看枚举属性,则可以使用Object.keys 。 这将返回相同的集合,减去不可枚举的constructor属性。

 var funcs = [] for(var name in myObject) { if(typeof myObject[name] === 'function') { funcs.push(name) } } 

我在一个没有半分钟的电话:)但这是一般的想法。

在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 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”

可以使用浏览器的开发人员工具(F12)在对象的原型链中检查方法:

  console.log(yourJSObject); 

或更直接地

  console.dir(yourJSObject.__proto__); 

在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]; }); };