tho*_*hom 85 javascript methods get function object
是否有方法或属性从对象中获取所有方法?例如:
function foo() {}
foo.prototype.a = function() {}
foo.prototype.b = function() {}
foo.get_methods(); // returns ['a', 'b'];
Run Code Online (Sandbox Code Playgroud)
更新:在Jquery中有类似的方法吗?
谢谢.
Mak*_*leh 67
function getMethods(obj)
{
var res = [];
for(var m in obj) {
if(typeof obj[m] == "function") {
res.push(m)
}
}
return res;
}
Run Code Online (Sandbox Code Playgroud)
Rei*_*man 46
请记住,技术上javascript对象没有方法.它们具有属性,其中一些可能是函数对象.这意味着您可以枚举对象中的方法,就像您可以枚举属性一样.这个(或接近这个)应该有效:
var bar
for (bar in foo)
{
console.log("Foo has property " + bar);
}
Run Code Online (Sandbox Code Playgroud)
这有一些复杂因素,因为对象的某些属性是不可枚举的,因此您将无法找到对象上的每个函数.
Sam*_*son 14
在现代浏览器中,您可以使用它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 );
Run Code Online (Sandbox Code Playgroud)
请注意,这只检索自己的属性,因此它不会返回原型链上其他地方找到的属性.但是,这似乎不是您的要求所以我认为这种方法就足够了.
如果您只想查看可枚举的属性,则可以改为使用Object.keys.这将返回相同的集合,减去非可枚举的constructor属性.
对我来说,获取最终扩展类的方法的唯一可靠方法是这样做:
function getMethodsOf(obj){
const methods = {}
Object.getOwnPropertyNames( Object.getPrototypeOf(obj) ).forEach(methodName => {
methods[methodName] = obj[methodName]
})
return methods
}
Run Code Online (Sandbox Code Playgroud)
可以使用浏览器的开发人员工具(F12)在对象的原型链中检查这些方法:
console.log(yourJSObject);
Run Code Online (Sandbox Code Playgroud)
或更直接
console.dir(yourJSObject.__proto__);
Run Code Online (Sandbox Code Playgroud)
在 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"]
Run Code Online (Sandbox Code Playgroud)