Rumah >hujung hadapan web >tutorial js >Bagaimanakah Array.prototype.slice.call(arguments) Mengubah Argumen menjadi Array?

Bagaimanakah Array.prototype.slice.call(arguments) Mengubah Argumen menjadi Array?

Linda Hamilton
Linda Hamiltonasal
2024-10-21 22:02:021032semak imbas

How Does Array.prototype.slice.call(arguments) Transform Arguments into an Array?

Menyelami Kerja Dalaman Array.prototype.slice.call(arguments)

Memahami gelagat Array.prototype.slice. call(arguments) menuntut penerokaan yang mendalam melangkaui penggunaan peringkat permukaannya untuk menukar argumen kepada tatasusunan tulen.

Biasanya, apabila slice() digunakan secara langsung pada tatasusunan, ia berulang melalui elemen itu tatasusunan. Walau bagaimanapun, menggunakan .call() dan .apply() menawarkan peluang unik untuk mentakrifkan nilai ini secara manual dalam fungsi.

Dalam kes Array.prototype.slice.call(arguments), tatasusunan -seperti objek, yang mempunyai numeric .length dan sifat diindeks, digantikan seperti ini. Penggantian ini memperbodohkan slice() dengan menganggap ia berurusan dengan tatasusunan tulen, memudahkan operasi normalnya.

Pertimbangkan contoh berikut di mana objek biasa, tanpa sifat tatasusunan yang wujud, ditetapkan seperti ini menggunakan .call():

var my_object = {
    '0': 'zero',
    '1': 'one',
    '2': 'two',
    '3': 'three',
    '4': 'four',
    length: 5
};

var sliced = Array.prototype.slice.call( my_object, 3 );

Hebatnya, slice() bertindak seperti yang diharapkan, menghasilkan hasil yang diingini:

['three','four'];

Mekanisme yang sama digunakan apabila objek argumen dihantar sebagai nilai untuk ini dalam Array. prototaip.slice.call(argumen). Memandangkan argumen mempunyai sifat .length dan tatasusunan indeks berangka, slice() meneruskan seolah-olah beroperasi pada tatasusunan sebenar, memberikan hasil yang konsisten dan boleh diramal.

Atas ialah kandungan terperinci Bagaimanakah Array.prototype.slice.call(arguments) Mengubah Argumen menjadi Array?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn