当前位置: 首页 > 知识库问答 >
问题:

在运行时获取对象的类名

傅奕
2023-03-14

是否可以在运行时使用TypeScript获取对象的类/类型名称?

class MyClass{}

var instance = new MyClass();
console.log(instance.????); // Should output "MyClass"

共有3个答案

郭乐湛
2023-03-14

我知道我迟到了,但我发现这也有效。

var constructorString: string = this.constructor.toString();
var className: string = constructorString.match(/\w+/g)[1]; 

或者。。。

var className: string = this.constructor.toString().match(/\w+/g)[1];

上面的代码将整个构造函数代码作为字符串获取,并应用正则表达式来获取所有“单词”。第一个单词应该是“函数”,第二个单词应该是类的名称。

希望这有所帮助。

岳良策
2023-03-14

我的解决方案是不依赖类名。object.constructor.name理论上是可行的。但是如果你在Ionic这样的东西中使用TypeScript,一旦你投入生产,它就会着火,因为Ionic的生产模式缩小了Javascript代码。所以类被命名为“a”和“e”

我最终做的是在构造函数为其指定类名的所有对象中都有一个typeName类

export class Person {
id: number;
name: string;
typeName: string;

constructor() {
typeName = "Person";
}

是的,那不是被问到的,真的。但是在将来可能会缩小的东西上使用constructor.name只是在乞求头痛。

赵正雅
2023-03-14
class MyClass {}

const instance = new MyClass();

console.log(instance.constructor.name); // MyClass
console.log(MyClass.name);              // MyClass

但是,请注意,使用小型代码时,名称可能会有所不同。

 类似资料:
  • 问题内容: 我该如何实现? 到目前为止,我尝试过的所有操作始终返回类型,而不是所使用的特定类型。 问题答案: 正如其他人所提到的,只有在某些情况下才能通过反思来实现。 如果你确实需要类型,这是通常的(类型安全的)解决方法:

  • 问题内容: 我该如何实现? 到目前为止,我尝试过的所有操作始终返回类型,而不是所使用的特定类型。 问题答案: 正如其他人所提到的,只有在某些情况下才能通过反射来实现。 如果你确实需要类型,这是通常的(类型安全)解决方法:

  • Java如何在运行时获取一个类的所有对象实例?这个类不一定由Spring管理,也不一定是单例 根据类名+ClassLoader得到所有的类的对象实例,而不是反射并new一个对象

  • 问题内容: 可以说我在代码中的某个位置有一个按钮:“ JButton closeButton”。我不知道它叫“ closeButton”,但这是我想找出的。 在运行时,该按钮将被单击,一旦完成,我就可以通过反射和AWT api找到很多关于它的信息-但是我不能做的就是找出它的位置- 在代码中如何调用它,名字叫什么它声明为(“ closeButton”)。 是否可以从JVM中找到它? 有没有一种方法可

  • 我用这个例子来理解ionic和php与mysql之间的操作,但我发现这个错误在我看来似乎是错误的,我不明白它来自哪里。奇怪的是,当我加载一个便笺时,它会工作,并加载到数据库中。 他离开了存储库,以防他们想要可视化代码https://github.com/javazika/ionic_crud_php_msqyl

  • 问题内容: 我正在尝试对一堆数据进行排序,以使输入到程序的数据大小可以大于JVM可用的内存,并且处理所需的外部排序要比Quicksort慢得多。 有什么方法可以在运行时获取可供JVM使用的内存,以便我可以在尽可能多的地方使用排序,并且仅在数据输入太大时才切换到Mergesort吗? 问题答案: 在类中查看以下方法: 例 还要注意,如果总内存已用完,则始终可以使用JVM参数分配更多的堆来启动JVM。