如何获取对象的方法?
是否有方法或属性可以从对象中获取所有方法?例如:
function foo() {}
foo.prototype.a = function() {}
foo.prototype.b = function() {}
foo.get_methods(); // returns ['a', 'b'];
UPDATE: Jquery 中有类似的方法吗?
谢谢。
Is there a method or propertie to get all methods from an object? For example:
function foo() {}
foo.prototype.a = function() {}
foo.prototype.b = function() {}
foo.get_methods(); // returns ['a', 'b'];
UPDATE: Are there any method like that in Jquery?
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
您可以简单地循环构造函数的原型并提取所有方法。
You can simply loop over the prototype of a constructor and extract all methods.
最好的方法是:
仅在 es6 中使用 'let',而使用 'var' 代替
the best way is:
use 'let' only in es6, use 'var' instead
在 Chrome 中是
keys(foo.prototype)
。返回[“a”,“b”]
。请参阅:https://developer.chrome.com/devtools/docs/commandline- api#keysobject
稍后编辑:如果您需要快速复制它(对于更大的对象),请执行
copy(keys(foo.prototype))
你就会把它放在剪贴板中。In Chrome is
keys(foo.prototype)
. Returns["a", "b"]
.See: https://developer.chrome.com/devtools/docs/commandline-api#keysobject
Later edit: If you need to copy it quick (for bigger objects), do
copy(keys(foo.prototype))
and you will have it in the clipboard.获取方法名称:
或者,获取方法:
Get the Method Names:
Or, Get the Methods:
请记住,从技术上讲,JavaScript 对象没有方法。它们具有属性,其中一些可能是函数对象。这意味着您可以枚举对象中的方法,就像枚举属性一样。这个(或类似的东西)应该可以工作:
这很复杂,因为对象的某些属性是不可枚举的,因此您将无法找到对象上的每个函数。
Remember that technically javascript objects don't have methods. They have properties, some of which may be function objects. That means that you can enumerate the methods in an object just like you can enumerate the properties. This (or something close to this) should work:
There are complications to this because some properties of objects aren't enumerable so you won't be able to find every function on the object.
您可以使用console.dir(object) 将该对象属性写入控制台。
You can use
console.dir(object)
to write that objects properties to the console.在现代浏览器中,您可以使用
Object.getOwnPropertyNames
获取对象上的所有属性(可枚举和不可枚举)。例如:
请注意,这仅检索自己的属性,因此它不会返回在原型链上其他地方找到的属性。然而,这似乎不是您的要求,所以我认为这种方法就足够了。
如果您只想查看可枚举属性,则可以使用
Object.keys
。这将返回相同的集合,减去不可枚举的构造函数属性。In modern browsers you can use
Object.getOwnPropertyNames
to get all properties (both enumerable and non-enumerable) on an object. For instance:Note that this only retrieves own-properties, so it will not return properties found elsewhere on the prototype chain. That, however, doesn't appear to be your request so I will assume this approach is sufficient.
If you would only like to see enumerable properties, you can instead use
Object.keys
. This would return the same collection, minus the non-enumerableconstructor
property.对我来说,获取最终扩展类的方法的唯一可靠方法是这样做:
for me, the only reliable way to get the methods of the final extending class, was to do like this:
可以使用浏览器的开发人员工具 (F12) 在对象的原型链中检查这些方法:
或更直接
The methods can be inspected in the prototype chain of the object using the browser's developer tools (F12):
or more directly
在 ES6 中:
In ES6:
我使用的电话没有分号:),但这是一般的想法。
I'm on a phone with no semi colons :) but that is the general idea.