📅  最后修改于: 2023-12-03 15:41:29.850000             🧑  作者: Mango
在 JavaScript 中,我们可以通过以下几种方式来获取类的名称:
constructor.name
class MyClass {}
const obj = new MyClass();
console.log(obj.constructor.name); // => "MyClass"
这种方式利用了 JavaScript 语言提供的 constructor
属性,来获取该对象所属类的构造函数,再通过 name
属性获取类的名称。需要注意的是,这种方式可能会有一定的兼容性问题,因为 constructor
属性并不是所有的 JavaScript 对象都具有的特性。
Object.prototype.toString.call
class MyClass {}
const obj = new MyClass();
console.log(Object.prototype.toString.call(obj)); // => "[object MyClass]"
这种方式则利用了 JavaScript 内置的 Object
类上的 toString
方法,将调用它的对象类型转换成字符串格式。因为每种类型的对象都有一个对应的字符串格式,所以通过这种方式可以间接地获取对象所属的类名称。需要注意的是,这种方式只能精确地获取类名,而不能准确地获取继承层次关系。
Function.prototype.name
class MyClass {}
console.log(MyClass.name); // => "MyClass"
这种方式则利用了 JavaScript 中函数对象的特性,在定义类的时候,利用 class
关键字定义的类实际上是一个函数,函数对象具有 name
属性来表示其函数名称。所以,通过这种方式可以直接获取到该类的名称。
综上所述,这三种方式都可以用来获取类的名称,其中第一种方式最为直接,但是可能有一定的兼容性问题;第二种方式则最为普适,可以获取任何类型对象的类名,但是不能精确地获取继承层次关系;第三种方式则最为简便,可以直接获取到定义时的类名。根据实际需求可以选择不同的方式来使用。