如何获取对象的方法?

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)

  • 好的,这有效,但不是有建设方式吗?谢谢. (3认同)
  • `for..in`方式是标准方法. (2认同)

Rei*_*man 46

请记住,技术上javascript对象没有方法.它们具有属性,其中一些可能是函数对象.这意味着您可以枚举对象中的方法,就像您可以枚举属性一样.这个(或接近这个)应该有效:

var bar
for (bar in foo)
{
    console.log("Foo has property " + bar);
}
Run Code Online (Sandbox Code Playgroud)

这有一些复杂因素,因为对象的某些属性是不可枚举的,因此您将无法找到对象上的每个函数.

  • 没有`console.Write` (2认同)
  • 也许他在谈论console.log.谢谢. (2认同)
  • 是的,我不是每天都做JS,所以我不是百分之百.但我确实理解这种语言.. (2认同)

pst*_*trm 27

您可以使用console.dir(object)将该对象属性写入控制台.


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属性.


Jo-*_*-Go 8

对我来说,获取最终扩展类的方法的唯一可靠方法是这样做:

function getMethodsOf(obj){
  const methods = {}
  Object.getOwnPropertyNames( Object.getPrototypeOf(obj) ).forEach(methodName => {
    methods[methodName] = obj[methodName]
  })
  return methods
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*eil 6

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

  console.log(yourJSObject);
Run Code Online (Sandbox Code Playgroud)

或更直接

  console.dir(yourJSObject.__proto__);
Run Code Online (Sandbox Code Playgroud)


Kev*_*eal 5

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