【问题标题】:How to get list of all static members of some class in javascript如何在javascript中获取某个类的所有静态成员的列表
【发布时间】:2013-03-01 16:22:54
【问题描述】:

我想获取某个类的所有静态成员的列表。例如:我想获取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);
}

静态成员怎么样?

【问题讨论】:

  • 对此感到抱歉。您可以通过以下方式获取公共成员:for(var i in obj){alert(i + " : " + obj[i]);} 但与类不同。我会检查您的建议,但我发现浏览器兼容性有问题(例如仅支持 ie9)
  • 所以试着解释一下你所说的“静态成员”是什么意思。你是什​​么意思“但它与类不同”? Object.keys 有一个 polyfill,您可以插入它以包含对旧浏览器的兼容性(向下滚动到“兼容性”部分)。 Object.getOwnPropertyNames 有点不同,所以我不确定它是否是您正在寻找的东西。
  • 为了确定,您正在尝试获取某个类的所有静态成员的列表?
  • @AleksanderFras:欢迎来到 Stack Overflow!请记下对您的帖子进行的格式改进;关于 Stack Overflow 格式化选项的文档可以在 stackoverflow.com/editing-help 找到

标签: javascript oop static


【解决方案1】:

你是如何检查它们的?

为什么你不能只使用同一个迭代器来遍历你的实际类?

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

这不是您的日常语言。
实际上 JS 中的一切都是对象,包括函数/构造函数。

因此,在您看来,这里的“公共静态”实际上只是一个对象的方法,可以像任何其他对象一样迭代。

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

【讨论】:

  • 你是绝对正确的。这让我很困扰,为什么我不能以这种方式获得 Object 的结果(例如 Object.create ......)但是如果 typeof 不是“未定义”,则应该存在类似 Object.create 的东西。
  • 因为它是一个原生对象,并且被隐藏属性锁定,直到 ECMAScript5 才向最终用户公开。
【解决方案2】:

您可以使用Object.keys

Object.keys(MyClass);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2015-06-04
    • 2012-06-16
    • 2016-07-13
    • 2011-09-20
    • 1970-01-01
    相关资源
    最近更新 更多