Mari kita lihat penjelasan panggilan di MDN terlebih dahulu
Metode Call () memanggil fungsi atau metode dengan nilai yang ditentukan ini dan beberapa nilai parameter yang ditentukan.
Catatan: Fungsi metode ini mirip dengan metode Apply (), dengan hanya satu perbedaan, yaitu, metode panggilan () menerima daftar beberapa parameter, sedangkan metode Apply () menerima array yang berisi beberapa parameter.
tata bahasa
fun.call (thisarg [, arg1 [, arg2 [, ...]]]))
parameter
Thisarg
Nilai ini ditentukan saat fungsi menyenangkan sedang berjalan. Perlu dicatat bahwa nilai yang ditentukan ini tidak selalu berarti nilai nyata ini ketika fungsi dieksekusi. Jika fungsi ini dalam mode non-ketat, nilai ini ditentukan sebagai nol dan tidak terdefinisi akan secara otomatis menunjuk ke objek global (objek jendela di browser), dan nilai ini dengan nilai asli (angka, string, nilai boolean) akan menunjuk ke objek pembungkus otomatis dari nilai asli.
arg1, arg2, ...
Daftar parameter yang ditentukan.
Contoh -contoh tentang MDN tidak mudah dimengerti di awal. Saya mempostingnya di sini. Jika Anda tertarik, Anda dapat memeriksa sendiri Call-Javascript.
Thisarg di sini ditafsirkan sebagai nilai ini yang ditentukan ketika kesenangan berjalan, yaitu, setelah menggunakan panggilan, ini dalam poin yang menyenangkan ke Thisarg? Lihat kodenya
var p = "456"; fungsi f1 () {this.p = "123"; } function f2 () {console.log (this.p); } f2 (); // 456 f2.call (f1 ()); // 123 f2.Apply (f1 ()); // 123Output pertama adalah variabel global yang disebut. Kemudian, karena penggunaan panggilan dan terapkan, ini dalam poin F2 ke F1, sehingga output menjadi 123. Faktanya, F1 meminjam metode F2 dan menghasilkan p -nya sendiri
Pada saat ini, menghapus this.p di f1 () akan menghasilkan tiga 456, yang menegaskan bahwa ketika ini nol atau tidak terdefinisi, itu sebenarnya menunjuk ke variabel global.
Adapun objek pembungkus yang menunjuk pada nilai aslinya, karena objek pembungkus yang saya pahami bersifat sementara, dan hanya jenis nilai asli yang merupakan output selama tes alih -alih objek, bagaimana membuktikannya di sini jika ada yang tahu itu dapat mendiskusikannya dengan saya jika Anda berharap itu akan dibahas dengan saya, terima kasih!
Karena panggilan dapat mengimplementasikan satu objek untuk meminjam objek lain, dapatkah ia menerapkan warisan? Lihat kodenya
function f1 () {this.father = "ayah"} function f2 () {f1.call (this); this.child = "anak"; } var test = f2 baru (); console.log (test.father); //ayahTidak ada ayah yang diuji, karena di f2 ()
f1.call (ini);
Ini di sini menunjuk ke F2, yaitu, F2 meminjam metode F1, yang sebenarnya menyadari warisan.
Mari kita bicara tentang parameter di sini. Parameter di sini diteruskan untuk bersenang -senang. Mari kita lihat kodenya
fungsi f1 () {this.p = "123"; } function f2 (x) {console.log (this.p); console.log (x); } f2.call (f1 (), 456); // 123 // 456Output 123 adalah karena P dalam F1, dan 456 berikutnya adalah parameter yang diteruskan ke F2, yang mudah dimengerti.
Terutama memperhatikan perbedaan antara parameter dalam panggilan dan berlaku
Panggilan disahkan dalam satu per satu, sementara berlaku adalah array yang dilewati
fungsi f1 () {this.p = "Test call"; } fungsi f2 (x, y, z) {console.log (this.p); console.log (x); console.log (y); console.log (z); } function f3 () {this.p = "test apply"; } f2.call (f1 (), 4,5,6); f2.call (f1 (), [4,5,6]); F2.Apply (F3 (), [4,5,6]); F2.Apply (F3 (), 4,5,6);Anda dapat melihat hasilnya di sini
Panggilan tes pertama adalah output yang benar
Panggilan tes kedua dilewati dalam array, jadi satu array adalah output pertama dan dua tidak terdefinisi
Tes paragraf ketiga berlaku output yang benar
Paragraf keempat secara langsung melaporkan kesalahan karena kesalahan dalam format parameter
Perbedaannya di sini harus jelas