Rumah >hujung hadapan web >tutorial js >Apakah Mekanisme Di Sebalik Transformasi Hujah Array.prototype.slice.call?
Kerja Dalaman Array.prototype.slice.call: Demystifying Argument Transformation
Sudah biasa diketahui bahawa Array.prototype.slice.call (argumen) membolehkan hujah dianggap sebagai tatasusunan sebenar. Walau bagaimanapun, kerja rumit di sebalik transformasi ini masih menjadi misteri kepada ramai. Mari kita mendalami teknikal untuk memahami sepenuhnya fungsinya.
Biasanya, apabila memanggil kaedah .slice(), sasarannya ialah tatasusunan. Ia berulang melalui tatasusunan dan melaksanakan operasi yang dimaksudkan.
Tetapi apakah yang berlaku apabila .slice() digunakan dengan sesuatu yang bukan tatasusunan sebenar? Di sinilah keajaiban Array.prototype.slice.call dimainkan.
Dengan menggunakan kaedah .call(), kami mentakrifkan nilai ini secara manual untuk fungsi .slice(). Ini memberi kita keupayaan untuk melepasi mana-mana objek yang menyerupai tatasusunan, walaupun objek biasa seperti my_object yang ditunjukkan di bawah:
var my_object = { '0': 'zero', '1': 'one', '2': 'two', '3': 'three', '4': 'four', length: 5 };
Selagi objek itu mempunyai sifat .length dan berkelakuan seperti tatasusunan dari segi indeks berangka, ia menipu .slice() untuk melaksanakan operasi yang dimaksudkan.
Pertimbangkan contoh yang disediakan:
var sliced = Array.prototype.slice.call( my_object, 3 );
Hasilnya, seperti yang dijangkakan, ialah ['tiga', 'empat' ], menunjukkan bahawa .slice() telah mengekstrak elemen yang dikehendaki dengan lancar daripada tatasusunan sementara kami.
Pada dasarnya, Array.prototype.slice.call(arguments) memanfaatkan penggantian objek untuk memperkasakan fungsi .slice() kepada mengendalikan hujah seolah-olah ia adalah tatasusunan tulen. Ini membolehkan kami mengubah hujah menjadi tatasusunan yang berkelakuan baik untuk manipulasi selanjutnya.
Atas ialah kandungan terperinci Apakah Mekanisme Di Sebalik Transformasi Hujah Array.prototype.slice.call?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!