JS - 获取类的成员名称

JS - get the member names of the class

本文关键字:成员 获取 JS      更新时间:2023-09-26

我需要获取类的成员名称(字段和方法)或至少字段名称。例如,我有以下类:

function PersonClass(){
  this.name="Jack";
  this.surname="SomeOne";
}

我有两个解决方案:

  1. 将类转换为字符串并使用正则表达式
  2. 在类中创建方法并使用for ... in this获取成员。但是,要运行此方法,我需要创建类的实例。

我不喜欢他们两个。是否有其他解决方案可以获取成员名称?

您可以使用

对象的prototype来执行此操作。例如,给定一个类类 javascript 对象的定义:

var MyObject = function() {
};
MyObject.prototype.foo = 3;
MyObject.prototype.bar = function(){
    alert("bar");
};

这将起作用(不需要实例):

for(var x in MyObject.prototype)
    alert(x);  // alerts "foo" and then "bar"

以相同的方式,实例通常可以工作

var o = new MyObject();
for(var x in o)
    alert(x);  // also alerts "foo" and then "bar"

获得成员名称后,您将如何处理它们?

为什么你会想象在调用构造函数来创建特定实例之前,当它们甚至不存在时,你可以以某种方式获得它们?

为什么你会相信你可以写一个如此聪明的正则表达式,以至于它可以很好地解析JS来提取所有属性(而不是"字段")?这样的正则表达式怎么可能识别由其他地方定义的原型方法动态和有条件地添加的属性?

如果要记录此类元数据,则只需显式执行此操作,最有可能作为构造函数上的属性:

PersonClass.properties = ['name', 'surname'];

在某些遥远的 JS 版本中,您可以通过注释来执行此操作:

@properties('name', 'surname')
function PersonClass() { ...