Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中获取某个类的所有静态成员的列表_Javascript_Oop_Static - Fatal编程技术网

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

如何在javascript中获取某个类的所有静态成员的列表,javascript,oop,static,Javascript,Oop,Static,我想得到某个类的所有静态成员的列表。例如:我想获取对象的所有静态成员(如对象。如果可用,则创建,依此类推)。我该怎么做 例如: var ClassA = function(){} ClassA.prototype.getName = function(){return "ClassA";} //public method ClassA.alertName = function(){ alert("ClassA");} //static method ClassA.doSomething = fu

我想得到某个类的所有静态成员的列表。例如:我想获取
对象
的所有静态成员(如
对象。如果可用,则创建
,依此类推)。我该怎么做

例如:

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
所以,如果我有更多的静态成员,我想至少得到他们的名字。在本例中,我希望获得
alertName
doSomething
。对于公共成员,您可以这样做:

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

静态成员怎么样?

您如何检查它们

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

var key = "";
for (key in MyClass) { console.log(key); }
这不是你的日常语言。
实际上,JS中的所有内容都是对象,包括函数/构造函数

因此,在这里,对您来说似乎是“publicstatic”的东西实际上只是一个对象的方法,它可以像任何其他对象一样进行迭代

另外:原型是公共静态的。
如果将一个属性原型化到实例中,则所有实例都会引用该完全相同的属性,对该属性的修改将更改其他所有人的引用。

您可以使用


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

试试看,或者(取决于您想要什么)对此表示歉意。您可以通过以下方式获得公共成员:for(vari in obj){alert(i+“:“+obj[i]);},但它与类不同。我会检查您的建议,但我发现浏览器兼容性存在问题(例如仅支持ie9),所以请尝试解释更多您所说的“静态成员”的含义。你说的“但这与课堂不同”是什么意思
Object.keys
有一个polyfill,您可以插入它以包含对旧浏览器的兼容性(向下滚动到“兼容性”部分)。
对象.getOwnPropertyNames
有点不同,所以我不确定这是否是您要查找的对象。只是确定一下,您正在尝试获取某个类的所有静态成员的列表?@AleksanderFras:欢迎使用堆栈溢出!请记下对您的帖子所做的格式改进;有关堆栈溢出的格式化选项的文档可以在网站上找到,您完全正确。这让我很困扰,为什么我不能以这种方式获得Object的结果(例如Object.create…),但如果Type不是“未定义”,则应该存在类似Object.create的东西。因为它是本机对象,并且被隐藏属性锁定,直到ECMAScript 5才向最终用户公开。
Object.keys(MyClass);