<代码> A { 构造函数(a, b=bbb, c=1) { 这一点。一个=; 这一点。b=b; 这一点。c=c; } }代码>
获取类的原型对象构造函数属性:
<代码> const desc3=Object.getOwnPropertyDescriptor (A。原型,构造函数); console.info (desc3); 代码>
结果如下:
<代码> { 价值:函数:, 可写:没错, 可列举的:假的, 可配置:真 }代码>
由此看出一个的原型对象构造函数属性的值实际上是一个函数,我们进一步获取这个函数的属性描述:
<代码> console.info (Object.getOwnPropertyDescriptors (desc3.value)); 代码>
或者直接获取:
<代码> console.info (Object.getOwnPropertyDescriptors (A.prototype.constructor)); 代码>
得到如下结果:
<代码> { 长度:{ 值:1 可写:假的, 可列举的:假的, 可配置:真 }, 原型:{ 价值:{}, 可写:假的, 可列举的:假的, 可配置:假 }, 名称:{ 值:' A ', 可写:假的, 可列举的:假的, 可配置:真 } }代码>
由此可以知道,我们可以通过类的prototype.constructor.name属性获取到类名。
<代码> console.info (A.prototype.constructor.name); 代码>
我们已经知道了如何通过属性获取类的名称,但对像类实例对象直接使用这种方法是行不通的,原因是类的对象实例没有原型属性。
<代码> console.info(未定义==new () .prototype); 代码>
以上输出结果为:真的,说明类的实例对象是没有原型属性的。但我们可以通过Object.getPrototypeOf获取到对象对应的原型。
<代码> const实例=new (); const objProto=Object.getPrototypeOf(实例); console.info (objProto===A.prototype); console.info (Object.getOwnPropertyDescriptors (objProto)); console.info (Object.getOwnPropertyDescriptors (objProto.constructor)); 代码>
以上代码的输出结果为:
<代码>正确的 {构造函数: {值:函数:, 可写:没错, 可列举的:假的, 可配置:真}} {长度: {价值:1、 可写:假的, 可列举的:假的, 可配置:真}, 原型: {值:{}, 可写:假的, 可列举的:假的, 可配置:假}, 名称: {值:' A ', 可写:假的, 可列举的:假的, 可配置:真}}代码>
说明通过Object.getPrototypeOf获取到的对象原型与类的原型对象是同一个实例。获取到原型对象后,我们就可以获取到对象的类名。
<代码> console.info (objProto.constructor.name); 代码>