Dalam JavaScript, panggil, gunakan dan ikat adalah tiga kaedah yang disertakan dengan objek Fungsi Artikel ini akan memahami tiga kaedah secara terperinci melalui aplikasi beberapa senario.
panggil()
Kaedah panggilan() memanggil fungsi atau kaedah menggunakan nilai ini yang ditentukan dan beberapa nilai parameter yang ditentukan.
Apabila memanggil fungsi, anda boleh menetapkan objek ini yang berbeza. ini merujuk kepada objek semasa, parameter pertama kaedah panggilan.
Melalui kaedah panggilan, anda boleh meminjam kaedah pada satu objek daripada objek lain, seperti Object.prototype.toString.call([]), iaitu kaedah peminjaman objek Array pada objek Objek.
Syntax fun.call(thisArg[, arg1[, arg2[, ...]]])
thisArg
Nilai ini ditentukan apabila fungsi menyeronokkan sedang berjalan. Apa yang anda perlu beri perhatian ialah situasi berikut
(1) Jangan lulus, atau lulus null atau undefined Ini dalam fungsi menghala ke objek tetingkap
(2) Lulus nama fungsi fungsi lain Ini dalam fungsi menunjuk kepada rujukan kepada fungsi ini, yang tidak semestinya nilai ini sebenar apabila fungsi itu dilaksanakan
(3) Ini yang nilainya adalah nilai primitif (nombor, rentetan, nilai Boolean) akan menunjukkan kepada objek pembungkusan automatik bagi nilai primitif, seperti String, Number, Boolean
(4) Lulus objek, dan ini dalam fungsi menghala ke objek ini
arg1, arg2, ...
Senarai parameter yang ditentukan.
Contoh
Contoh aplikasi asas
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Gunakan kaedah panggilan untuk memanggil fungsi tanpa nama dan nyatakan ini dalam konteks
Dalam contoh berikut, apabila kaedah salam dipanggil, nilai kaedah ini akan terikat pada objek i.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Gunakan kaedah panggilan untuk memanggil fungsi tanpa nama
Dalam badan gelung for dalam contoh berikut, kami mencipta fungsi tanpa nama, dan kemudian melaksanakan fungsi tanpa nama dengan memanggil kaedah panggilan fungsi tersebut, menggunakan setiap elemen tatasusunan seperti yang dinyatakan nilai ini. Tujuan utama fungsi tanpa nama ini adalah untuk menambah kaedah cetakan pada setiap objek elemen tatasusunan ini boleh mencetak nombor indeks yang betul bagi setiap elemen dalam tatasusunan. Sudah tentu, ia tidak perlu untuk menghantar elemen tatasusunan ke dalam fungsi tanpa nama kerana nilai ini (parameter normal sudah mencukupi).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Gunakan kaedah panggilan untuk memanggil fungsi dan lulus parameter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
mohon()
Sintaks hampir sama dengan kaedah call(), satu-satunya perbezaan ialah parameter kedua permohonan mestilah tatasusunan (atau objek seperti tatasusunan) yang mengandungi berbilang parameter. Ciri permohonan ini sangat penting,
Apabila memanggil fungsi sedia ada, anda boleh menentukan objek ini untuknya. ini merujuk kepada objek semasa, iaitu objek yang memanggil fungsi ini. Menggunakan apply, anda boleh menulis kaedah sekali dan kemudian mewarisinya dalam objek lain, tanpa perlu menulis kaedah berulang kali dalam objek baharu.
Sintaks: fun.apply(thisArg[, argsArray])
Nota: Adalah penting untuk ambil perhatian bahawa Chrome 14 dan Internet Explorer 9 masih tidak menerima objek seperti tatasusunan. Jika objek seperti tatasusunan dihantar masuk, mereka akan membuang pengecualian.
Parameter
thisArg
Sama seperti parameter thisArg bagi panggilan di atas.
argsArray
Suatu tatasusunan atau objek seperti tatasusunan, elemen tatasusunan yang akan dihantar sebagai parameter berasingan kepada fungsi yang menyeronokkan. Jika nilai parameter ini adalah batal atau tidak ditentukan, ini bermakna tiada parameter perlu dihantar. Bermula dari ECMAScript 5, objek seperti tatasusunan tersedia.
Contoh
1 2 3 4 5 6 |
|
Contoh penggunaan apply to link constructor
Anda boleh menggunakan apply untuk memautkan pembina ke objek, serupa dengan Java Dalam contoh berikut, kami akan mencipta fungsi Fungsi global yang dipanggil konstruk untuk membolehkan anda menggunakan objek seperti tatasusunan dalam pembina dan bukannya senarai parameter. .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Gunakan aplikasi dan fungsi terbina dalam
Penggunaan penggunaan pintar membolehkan anda menggunakan fungsi terbina dalam dalam tugas tertentu yang sebaliknya akan ditulis sebagai lelaran ke atas pembolehubah tatasusunan. Dalam contoh berikut kita akan menggunakan Math.max/Math.min untuk mencari nilai maksimum/minimum dalam tatasusunan.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Susun atur parameter dipotong menjadi kepingan dan dihantar dalam gelung
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
ikat
Fungsi bind() mencipta fungsi baharu (dipanggil fungsi terikat)
bind ialah kaedah baharu dalam ES5
Melepasi parameter adalah serupa dengan memanggil atau memohon
Fungsi yang sepadan tidak akan dilaksanakan, memanggil atau memohon akan secara automatik melaksanakan fungsi yang sepadan
Mengembalikan rujukan kepada fungsi
Syntax fun.bind(thisArg[, arg1[, arg2[, ...]]])
Contoh berikut: Apabila halaman web diklik, EventClick dicetuskan dan dilaksanakan, dan JSLite.io p1 p2 adalah output, menunjukkan bahawa ini dalam EventClick telah ditukar menjadi objek obj melalui bind. Jika anda menukar EventClick.bind(obj,'p1','p2') kepada EventClick.call(obj,'p1','p2'), halaman tersebut akan terus mengeluarkan JSLite.io p1 p2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Serasi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
应用场景:继承
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
原型扩展
在原型函数上扩展和自定义方法,从而不污染原生函数。例如:我们在 Array 上扩展一个 forEach
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|