Javascript 获取类构造函数参数名称

Javascript 获取类构造函数参数名称,javascript,ecmascript-6,reflection,dependency-injection,Javascript,Ecmascript 6,Reflection,Dependency Injection,我正在为ES类实现某种依赖项注入解决方案,为此我需要知道类构造函数参数的确切名称 当我得到类或类静态方法的字符串形式时,它确实给出了完整的代码(通常用于函数),但对于类构造函数它并没有给出完整的代码 class C { constructor(a, b) { }; static m(x,y) { } } console.log(C); console.log(C.constructor); console.log(C.m); 导致 class C { constructor(a, b) { }

我正在为ES类实现某种依赖项注入解决方案,为此我需要知道类构造函数参数的确切名称

当我得到类或类静态方法的字符串形式时,它确实给出了完整的代码(通常用于函数),但对于类构造函数它并没有给出完整的代码

class C { constructor(a, b) { }; static m(x,y) { } }
console.log(C);
console.log(C.constructor);
console.log(C.m);
导致

class C { constructor(a, b) { }; static m(x,y) { } }
ƒ Function() { [native code] }
ƒ m(x,y) { }
因此,我必须解析整个类代码以提取构造函数参数部分,使用如下正则表达式

C.toString().split(/constructor\s*[^\(]*\(\s*([^\)]*)\)/m)
有没有更干净的方法来获取构造函数参数名

更新: 感谢您的所有意见和评论,但我非常清楚缩小是如何工作的,TS装饰器是如何工作的,AngularJS DI是如何实现的,以及它是如何工作的。这与问题无关。问题是:


是否可以像函数一样获取构造函数代码?

不应将参数名称视为确定向
构造函数中注入内容的可靠方法。正如您所注意到的,JavaScript的设计不允许您以正确的方式检索这些名称,如果您处于浏览器上下文中,则可能在发布代码之前缩小了代码,从而导致名称丢失

JavaScript中的依赖注入机制通常依赖于元数据,比如Angular的元数据。它使用TypeScript装饰器将有序参数类型存储在
映射
中,映射的键是类本身,值是类的
数组
。然后,通过一个简单的引用比较(或
instanceof
),可以检查所需的类是否已经在可注入对象池中实例化


FYI Loopback是另一个后端框架(在Node.js中运行),它使用TypeScript和依赖注入。

我不这么认为。类是它的构造函数。构造函数本身的函数体不会存储在任何地方。迷你器和Transpiler会很高兴地重命名变量和函数参数,因此您不应该依赖于
.toString()
任何行为。如果您需要字符串用于注入,那么您的注入框架应该要求人们显式地指定它们。很抱歉,我知道所有这些,angularjs(1.*)中的DI是基于使用正则表达式解析函数代码,而不是typescript。虽然我仍然感谢你的意见,但它并没有回答这个问题,而是指出没有明确的方法来获取构造函数的参数名称或代码。答案是:没有更干净的方法,自从AngularJS以来,在这方面没有任何改变