如何在JavaScript中获取某个类的所有静态成员列表

4

我想获取某个类的所有静态成员列表。例如:我想获取Object的所有静态成员(如Object.create等)。我该如何做到这一点?

示例:

var ClassA = function(){}
ClassA.prototype.getName = function(){return "ClassA";} //public method
ClassA.alertName = function(){ alert("ClassA");} //static method
ClassA.doSomething = function(){return "Do something";} //another static method

因此,如果我有更多静态成员,我希望至少能获取它们的名称。在本例中,我想要获取 alertNamedoSomething。对于公共成员,您可以这样做:

for (i in ClassA.prototype) {
    alert(i);
}

静态成员怎么样?

1
尝试使用 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys 或者 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames(根据您的需求) - Ian
你确定你想获取某个类的所有静态成员列表吗? - Vivin Paliath
1
@AleksanderFras:欢迎来到Stack Overflow!请注意我们对您的帖子所做的格式改进;有关Stack Overflow格式选项的文档可以在http://stackoverflow.com/editing-help找到。 - Matt
只是确认一下:是的 :) 很好 :) - AlFra
@Ian,“静态成员”是什么意思?实际上,对于Ecmascript这个术语“static”有一个非常明确的定义,它的意思与他所展示的例子一样。ES6甚至引入了一个新的关键字“static”,允许您在类定义中编写静态成员(如果没有该关键字,则必须像示例中那样稍后添加它们)。同时,您的“new record”评论获得了4个赞,而问题本身却没有获得任何赞,尽管它是一个非常好的问题。 - Stijn de Witt
显示剩余4条评论
2个回答

8

你是如何尝试检查它们的?

为什么不能使用相同的迭代器遍历你的实际类?

var key = "";
for (key in MyClass) { console.log(key); }

这不是你每天使用的语言。
实际上,JS中几乎所有的东西都是对象,包括函数/构造函数。

因此,对于你来说似乎像"public static"的东西,在这里实际上只是一个对象的方法,可以像其他任何对象一样进行迭代。

另外:原型是公共静态的。
如果您将属性原型化到您的实例中,则所有实例都具有对该确切属性的引用,并且修改该属性会为其他人更改引用。


你说得完全正确。我很困惑,为什么我不能用这种方式(例如Object.create)来获取对象的结果。但是如果它的typeof不是“undefined”,应该存在类似Object.create的东西。 - AlFra
因为它是一个本地对象,并且使用隐藏属性锁定,这些属性直到ECMAScript5才向最终用户公开。 - Norguard

3
您可以使用 Object.keys 方法。
Object.keys(MyClass);

这将为您提供所需对象的所有静态属性。此外,您无需检查继承的属性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接