Apabila saya membaca penerangan di MDN, saya mengalami keraguan. MDN menerangkan kaedah ini seperti ini
Anda mungkin mahu mengembalikan objek Array pada kelas tatasusunan lanjutan MyArray. Sebagai contoh, apabila menggunakan kaedah seperti map() yang mengembalikan pembina lalai, anda mahu kaedah ini mengembalikan objek Array ibu bapa dan bukannya objek MyArray.
// demo
class MyArray extends Array {
static get [Symbol.species]() {
return Array; // 1
}
}
var a = new MyArray(1, 2, 3); // 2
var mapped = a.map(x => x * x); // 3
console.log(mapped instanceof MyArray); // false
console.log(mapped instanceof Array); // true
Mengikut pemahaman saya, kaedah ini akan dicetuskan apabila objek dicipta, dan objek yang diperoleh juga harus menjadi contoh jenis Array. Penyahpepijatan mendapati bahawa apabila kod dilaksanakan pada titik 2, ia tidak melompat ke titik 1 untuk pelaksanaan, tetapi meneruskan pelaksanaan ke titik 1 apabila kaedah peta pada titik 3 dilaksanakan. Pada masa ini a instanceof MyArray === true, a instanceof Array === true
. Selepas pelaksanaan 3 tempat, hasil output dalam kod akan diperolehi.
Bilakah kaedah ini akan dicetuskan? Mengapakah instanceof MyArray === benar tetapi dipetakan instanceof MyArray === false?
Anda boleh membaca arahan Guru Ruan http://es6.ruanyifeng.com/#do... Nilai Simbol terbina dalam