我们能得到一个javascriptclass的属性吗?

Can we get the attributes of a javascript class?

我有这个 javascript class :

class UserDTO {

   constructor(props) {
       this.username = props.username;
       this.birthday = props.birthday;
   }
  }

我有一个 class 将实体转换为 DTO 的实用程序:

    class Utils  {

          convertEntityToDTO (entityObj, DTOClass) {
              // entityObj is an instance of a Entity,
              // DTOClass is a class not an instance
               let objDTO = new DTOClass();
               Object.getOwnPropertyNames(entityObj)
                    .filter(prop => DTOClass.hasOwnProperty(prop))
                    .forEach(prop => {
                        objDTO[prop] = entityObj[prop];
                    });
    }
}

这行不通 class; hasOwnProperty 仅适用于对象;是一种验证 属性 是否是 class 的属性的方法吗?或者我必须创建一个实例来测试?

您可以在实例上使用 hasOwnPropertygetOwnPropertyNames :

class A {
  constructor() {
    this.ex = 'TEST';
  }
}

var a = new A();
console.log(a.hasOwnProperty('ex'));
console.log(Object.getOwnPropertyNames(a));

如果您想要方法,则需要获取原型:

class B {
  constructor() {}
  
  exMethod() {
    console.log('test');
  }
}

var b = new B();
console.log(Object.getPrototypeOf(b).hasOwnProperty('exMethod'));
console.log(Object.getOwnPropertyNames(Object.getPrototypeOf(b)));