Javascript 如何获取对象';什么方法?

Javascript 如何获取对象';什么方法?,javascript,function,object,methods,get,Javascript,Function,Object,Methods,Get,是否存在从对象获取所有方法的方法或属性?例如: 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) {

是否存在从对象获取所有方法的方法或属性?例如:

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对象没有方法。它们具有属性,其中一些可能是函数对象。这意味着您可以枚举对象中的方法,就像枚举属性一样。这(或接近这一点的东西)应该起作用:

var bar
for (bar in foo)
{
    console.log("Foo has property " + bar);
}
由于对象的某些属性不可枚举,因此无法找到对象上的每个函数,因此这会带来复杂性

var methods = [];
for (var key in foo.prototype) {
    if (typeof foo.prototype[key] === "function") {
         methods.push(key);
    }
}

您可以简单地循环构造函数原型并提取所有方法。

在现代浏览器中,您可以使用它获取对象上的所有属性(可枚举和不可枚举)。例如:

职能人员(年龄、姓名){
这个。年龄=年龄;
this.name=名称;
}
Person.prototype.greet=函数(){
返回“我的名字是”+this.name;
};
Person.prototype.age=函数(){
this.age=this.age+1;
};
//[“构造器”、“问候”、“年龄”]
Object.getOwnPropertyNames(Person.prototype);
请注意,这只检索自己的属性,因此它不会返回原型链上其他位置的属性。然而,这似乎不是你的要求,所以我认为这种方法已经足够了


如果您只想查看可枚举属性,则可以使用。这将返回相同的集合,减去不可枚举的
构造函数
属性。

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

在Chrome中是
键(foo.prototype)
。返回
[“a”,“b”]

见:

稍后编辑:如果您需要快速复制它(对于较大的对象),请执行
复制(键(foo.prototype))
,然后将其保存在剪贴板中。

在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"]
最好的办法是:

let methods = Object.getOwnPropertyNames(yourobject);
console.log(methods)

仅在es6中使用“let”,改用“var”

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

或者更直接地

  console.dir(yourJSObject.__proto__);
获取方法名称:

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

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

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

的方式为..编写的
是标准方法。感谢您的编辑,克里斯!我想你喜欢TypeErrors…
TypeError:“[object object]”不是一个函数(计算'obj(m)
code现在用方括号固定。很抱歉给您带来不便。为方便起见添加了数组排序。如果您计算函数的条件
m instanceof
,是否会有差异?这不会考虑直接连接到object@MattGreer他的例子调用了构造函数上的方法。他是想从构造函数还是对象中得到方法是另一回事。什么手机没有分号,但可以让你回答问题?萝莉:我想一部新手机就是你的名字!也许他说的是console.log。谢谢。是的,我不是每天都做JS,所以我不是百分之百的喜欢。但我确实理解这种语言。另请参见:它返回一个属性列表。正如Ali所提到的,这不包括定义为类(方法)上的getter/setter的函数。
var getMethods     = function (obj) {
    return (Object.getOwnPropertyNames(obj).filter(function (key) {
        return obj[key] && (typeof obj[key] === "function");
    })).map(function (key) {
        return obj[key];
    });
};
function getMethodsOf(obj){
  const methods = {}
  Object.getOwnPropertyNames( Object.getPrototypeOf(obj) ).forEach(methodName => {
    methods[methodName] = obj[methodName]
  })
  return methods
}