class A {
constructor(a, b = 'bbb', c = 1) {
this.a = a;
this.b = b;
this.c = c;
}
}
獲取類的原型對象constructor屬性:
創(chuàng)新互聯(lián)是一家專業(yè)提供浦城企業(yè)網(wǎng)站建設,專注與成都做網(wǎng)站、成都網(wǎng)站建設、H5建站、小程序制作等業(yè)務。10年已為浦城眾多企業(yè)、政府機構(gòu)等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡公司優(yōu)惠進行中。
const desc3 = Object.getOwnPropertyDescriptor(A.prototype, 'constructor');
console.info(desc3);
結(jié)果如下:
{
value: [Function: A],
writable: true,
enumerable: false,
configurable: true
}
由此看出A的原型對象constructor屬性的值實際上是一個Function,我們進一步獲取這個Function的屬性描述:
console.info(Object.getOwnPropertyDescriptors(desc3.value));
或者直接獲?。?/p>
console.info(Object.getOwnPropertyDescriptors(A.prototype.constructor));
得到如下結(jié)果:
{
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);
我們已經(jīng)知道了如何通過屬性獲取類的名稱,但對像類實例對象直接使用這種方法是行不通的,原因是類的對象實例沒有prototype屬性。
console.info(undefined == new A().prototype);
以上輸出結(jié)果為: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));
以上代碼的輸出結(jié)果為:
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);
分享名稱:前端技術(shù)之:如何通過類的屬性獲取類名
文章轉(zhuǎn)載:http://www.muchs.cn/article38/jsocsp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、做網(wǎng)站、電子商務、品牌網(wǎng)站制作、App設計、移動網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)