是否有方法或属性从对象获取所有方法?例如:
function foo() {}
foo.prototype.a = function() {}
foo.prototype.b = function() {}
foo.get_methods(); // returns ['a', 'b'];
更新:在Jquery中是否有类似的方法?
谢谢。
答案 0 :(得分:64)
function getMethods(obj)
{
var res = [];
for(var m in obj) {
if(typeof obj[m] == "function") {
res.push(m)
}
}
return res;
}
答案 1 :(得分:46)
请记住,技术上javascript对象没有方法。它们具有属性,其中一些可能是函数对象。这意味着您可以枚举对象中的方法,就像您可以枚举属性一样。这个(或接近这个)应该有效:
var bar
for (bar in foo)
{
console.log("Foo has property " + bar);
}
这有一些复杂因素,因为对象的某些属性不可枚举,因此您无法在对象上找到每个函数。
答案 2 :(得分:27)
您可以使用console.dir(object)
将该对象属性写入控制台。
答案 3 :(得分:12)
在现代浏览器中,您可以使用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
属性。
答案 4 :(得分:6)
可以使用浏览器的开发人员工具(F12)在对象的原型链中检查方法:
console.log(yourJSObject);
或更直接
console.dir(yourJSObject.__proto__);
答案 5 :(得分:3)
在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"]
答案 6 :(得分:2)
var funcs = []
for(var name in myObject) {
if(typeof myObject[name] === 'function') {
funcs.push(name)
}
}
我在没有半冒号的手机上:)但这是一般的想法。
答案 7 :(得分:2)
最好的方法是:
let methods = Object.getOwnPropertyNames(yourobject);
console.log(methods)
仅在es6中使用'let',而使用'var'代替
答案 8 :(得分:1)
var methods = [];
for (var key in foo.prototype) {
if (typeof foo.prototype[key] === "function") {
methods.push(key);
}
}
您可以简单地遍历构造函数的原型并提取所有方法。
答案 9 :(得分:1)
对我来说,获得最终扩展类方法的唯一可靠方法是这样做:
function getMethodsOf(obj){
const methods = {}
Object.getOwnPropertyNames( Object.getPrototypeOf(obj) ).forEach(methodName => {
methods[methodName] = obj[methodName]
})
return methods
}
答案 10 :(得分:0)
在Chrome中keys(foo.prototype)
。返回["a", "b"]
。
请参阅:https://developer.chrome.com/devtools/docs/commandline-api#keysobject
稍后编辑:如果您需要快速复制(对于较大的对象),请执行copy(keys(foo.prototype))
,然后将其放入剪贴板。
答案 11 :(得分:0)
获取方法名称:
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];
});
};