如何获取对象的方法?
有没有一种方法或特性从对象中获取所有方法? 例如:
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]; }); };