前端技术之:如何通过类的属性获取类名
2019-11-05 05:22
1611 查看
class A { constructor(a, b = 'bbb', c = 1) { this.a = a; this.b = b; this.c = c; } }
获取类的原型对象constructor属性:
const desc3 = Object.getOwnPropertyDescriptor(A.prototype, 'constructor'); console.info(desc3);
结果如下:
{ value: [Function: A], writable: true, enumerable: false, configurable: true }
由此看出A的原型对象constructor属性的值实际上是一个Function,我们进一步获取这个Function的属性描述:
console.info(Object.getOwnPropertyDescriptors(desc3.value));
或者直接获取:
console.info(Object.getOwnPropertyDescriptors(A.prototype.constructor));
得到如下结果:
{ length: { value: 1, writable: false, enumerable: false, configurable: true }, prototype: { value: A {}, writable: false, enumerable: false, configurable: false }, name: { value: 'A', writable: false, enumerable: false, configurable: true } }
由此可以知道,我们可以通过类的prototype.constructor.name属性获取到类名。
console.info(A.prototype.constructor.name);
我们已经知道了如何通过属性获取类的名称,但对像类实例对象直接使用这种方法是行不通的,原因是类的对象实例没有prototype属性。
console.info(undefined == new A().prototype);
以上输出结果为:true,说明类的实例对象是没有prototype属性的。但我们可以通过Object.getPrototypeOf获取到对象对应的原型。
const instance = new A(); const objProto = Object.getPrototypeOf(instance); console.info(objProto === A.prototype); console.info(Object.getOwnPropertyDescriptors(objProto)); console.info(Object.getOwnPropertyDescriptors(objProto.constructor));
以上代码的输出结果为:
true { constructor: { value: [Function: A], writable: true, enumerable: false, configurable: true } } { length: { value: 1, writable: false, enumerable: false, configurable: true }, prototype: { value: A {}, writable: false, enumerable: false, configurable: false }, name: { value: 'A', writable: false, enumerable: false, configurable: true } }
说明通过Object.getPrototypeOf获取到的对象原型与类的原型对象是同一个实例。获取到原型对象后,我们就可以获取到对象的类名。
console.info(objProto.constructor.name);
相关文章推荐
- 数据库中,如何通过表名获取表的字段名(属性名)?
- 通过前端技术编写App如何和避免跨域
- (7)OGNL2:RequestAware前端设置list、set、map中每个属性,如何填写,如何获取
- java通过反射获取类名、属性名称以及@Table注解上的表名称
- Flex中如何通过监听focusIn和focusOut事件,在通过displayAsPassword属性固定密码格式显示文本框获取焦点时显示文本
- 前端——通过父元素获取同级元素的name属性
- java中如何通过Class获取类的属性、方法、注释
- 关于struts2中判断表单如果有类名.属性如何在js中获取输入框的值
- c#反射 通过类名获取实例和属性,方法
- 原生JS中如何获取CSS属性中的值
- 如何通过包名来获取下面所有的class文件
- js 通过event获取相关位置的属性
- Java如何获取xml文件中子节点的属性
- 【GoLang】golang 如何像Java 一样通过类名反射对象?
- 如何获取Input标签自定义属性的值
- 如何通过获取手机的联网方式列表
- 【Beautifulsoup】如何在网页中通过中文text获取标签
- 泛型约束通过反射获取相关值、属性名、属性类型
- java 通过反射获取调用类方法及属性
- js中如何复制一个对象,如何获取所有属性和属性对应的值