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
}