在 JavaScript 中获取对象的类名
How to get the Class Name of an Object in JavaScript
访问name
对象的构造函数上的属性以获取对象的类名,例如obj.constructor.name
.
该constructor
属性返回对创建实例对象的构造函数的引用。
class Person {} const p1 = new Person(); console.log(p1.constructor.name); // 👉️ Person console.log(Person.name); // 👉️ Person
我们访问了Object.constructorname
属性上的属性
。
该Object.constructor
属性返回对创建对象的构造函数的引用。
class Person {} const p1 = new Person(); // ✅ The function (class) that created the object console.log(p1.constructor); // 👉️ [class Person] // ✅ The class name of the object (string) console.log(p1.constructor.name); // 👉️ "Person"
通过在类上创建方法来获取对象的类名
另一种方法是在类上创建一个方法来获取对象的类名。
class Person { getClassName() { return this.constructor.name; } } const p1 = new Person(); const className = p1.getClassName(); console.log(className); // 👉️ Person
如果您需要Object.constructor.name
经常访问该属性,请创建一个隐藏它的方法。
Object.create(null)
)都具有构造函数属性。在没有构造函数的情况下创建的对象具有指向Object
特定类型的主构造函数的构造函数属性。
console.log({}.constructor.name); // 👉️ Object console.log([].constructor.name); // 👉️ Array
name
直接在类上访问属性
您还可以直接在类上访问name
属性以获取其名称作为字符串。
class Person {} console.log(Person.name); // 👉️ Person
检查对象是否是使用特定类创建的
您可以通过多种方式检查对象是否是使用特定类创建的。
obj.constructor.name === Person.name
当您缩小生产代码时,应该首选该选项。
class Person {} const p1 = new Person(); if (p1.constructor.name === 'Person') { // 👇️ this runs console.log("The object's constructor is Person"); } // -------------------------------------------------- // ✅ If you minify your code for production, do this if (p1.constructor.name === Person.name) { // 👇️ this runs console.log("The object's constructor is Person"); }
第一个if
语句访问该constructor.name
属性以获取对象的类名并将其与字符串“Person”进行比较。
class Person {} const p1 = new Person(); if (p1.constructor.name === 'Person') { // 👇️ this runs console.log("The object's constructor is Person"); }
这在大多数情况下都有效,但是,如果可能的话,最好将对象的类名与Person.name
.
class Person {} const p1 = new Person(); // ✅ If you minify your code for production, do this if (p1.constructor.name === Person.name) { // 👇️ this runs console.log("The object's constructor is Person"); }
如果您缩小生产代码,类的名称可能会改变。name
当您在比较中访问类的属性时,这不是问题。
通过定义静态方法获取对象的类名
您还可以定义一个static
可以直接在类上访问的方法,以获取对象的类名。
class Person { static getClassName() { return 'Person'; } getClassName() { return Person.getClassName(); } } const p1 = new Person(); const className = p1.getClassName(); console.log(className); // 👉️ Person console.log(Person.getClassName()); // 👉️ Person
关键字static
定义静态方法或字段。静态方法不能在类的实例上直接访问,必须在类本身上访问。
我们的静态方法返回字符串Person
,我们的实例方法调用静态方法返回相同的值。
如果需要在运行时检查对象是否是类的实例,请使用
instanceof
运算符。
class Person {} const p1 = new Person(); class Animal {} console.log(p1 instanceof Person); // 👉️ true console.log(p1 instanceof Animal); // 👉️ false
如果构造函数的属性出现在对象的原型链中,则instanceof返回,否则
返回。true
prototype
false
# 额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: