創(chuàng)建繼承類的實(shí)例時,調(diào)用構(gòu)造函數(shù)和不調(diào)用構(gòu)造函數(shù)的不同行為:
1我通過構(gòu)造函數(shù)時的情況:
class MyArray extends Array {
constructor(node) {
console.log(node)
super(node);
console.log('nodes in constructor 1', node); // first
}
};
let argument = ['first','second'];
let arr = new MyArray(...argument);
console.log(arr)// [first]
2自動發(fā)生的情況
class MyArray extends Array {};
let argument = ['first','second'];
let arr = new MyArray(...argument);
console.log(arr)// ['first', 'second']
有不同的行為請告訴我有什么區(qū)別,為什么會觀察到這種行為?提前感謝
在子類中,如果不提供,JavaScript引擎將提供的默認(rèn)構(gòu)造函數(shù)如下所示:
將其與構(gòu)造函數(shù)進(jìn)行對比(刪除
console.log
調(diào)用):請注意,您的版本僅將第一個參數(shù)傳遞給
super
,而默認(rèn)版本將所有參數(shù)傳遞給super
。這就是為什么你看到了你所看到的行為,你的構(gòu)造函數(shù)忽略了除了第一個參數(shù)以外的一切。
如果您想對第一個參數(shù)執(zhí)行一些特殊操作,但仍然將所有參數(shù)傳遞給
super
,那么可以使用rest參數(shù):旁注:請注意
Array
構(gòu)造函數(shù)處理其參數(shù)的方式很奇怪,因為它所做的事情根據(jù)它接收到的參數(shù)的數(shù)量和類型而有所不同:number
類型的參數(shù),它將創(chuàng)建一個空數(shù)組,其中length
設(shè)置為該數(shù)字。number
的參數(shù),它會將這些參數(shù)作為元素放入數(shù)組中。當(dāng)子類化
Array
時,必須小心處理that...unusual行為。