前端技术之:如何通过类的属性获取类名-创新互联
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);
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享文章:前端技术之:如何通过类的属性获取类名-创新互联
分享URL:http://myzitong.com/article/csepji.html