获取类的属性数组而不实例化它?

时间:2018-03-16 22:05:20

标签: javascript npm

看起来你应该能够做到这一点,因为如果逻辑可以在类的非法编写中编写,那么基于类定义(Angular)动态构建表单会更好。这是可扩展的,因此向类添加字段也不需要更新生成表单和模板的逻辑。

有没有办法做到这一点,甚至是NPM模块会做到这一点?

我发现我可以做ClassName.toString()但解析它会很痛苦。而且我可能会写一个模块来做其他事情。

我只是觉得为枚举其属性而实例化类的虚拟实例是一种糟糕的策略。

2 个答案:

答案 0 :(得分:1)

您可以使用Object.getOwnPropertyNames()

示例类:

class Foo { setBar() { throw Error('not implemented'); return false; } getBar() { throw Error('not implemented'); return false; } }

然后

Object.getOwnPropertyNames(Foo.prototype)

结果

["constructor", "setBar", "getBar"]

在我研究这个问题时,我首先调查了Object.keys,虽然它没有用,但您可能希望参考the documentation for Object.keys's polyfill。它包含用于删除constructortoString等的代码,以及正确实施hasOwnProperty

另见Bergi's answer here

答案 1 :(得分:0)

任何方式?将您的类声明为函数,并将属性放在原型上:

var Presidents = function() {
};

Presidents.prototype = {
  "washington" : "george",
  "adams" : "john"
}

console.log(Object.keys(Presidents.prototype))

// Output is
//  [ 'washington', 'adams' ]