Penggunaan tiga fungsi yang disebut, berlaku, dan mengikat adalah titik pengetahuan yang tidak dapat diatasi dengan mempelajari bahasa JavaScript. Izinkan saya merangkum penggunaan mereka bertiga dan skenario aplikasi umum.
Pertama, lihat fungsi panggilan, yang dapat dipahami sebagai "pinjaman" dan "permintaan". Bayangkan skenario berikut: Anda berkeliaran sendirian dan ingin menelepon ke rumah jika Anda memiliki masalah yang mendesak, tetapi sayangnya, ponsel Anda berada di hutang, atau tidak ada dalam negeri, atau jatuh ke dalam lubang. Singkatnya, ponsel Anda tidak berfungsi. Tetapi Anda harus melakukan panggilan ini, sehingga Anda dapat meminjam ponsel teman, ponsel tetangga, atau telepon umum. Dengan cara ini, Anda dapat menyelesaikan panggilan tanpa ponsel Anda tersedia. Adapun telepon yang Anda gunakan, itu tidak masalah. Ngomong -ngomong, itu adalah efek yang sama dengan melakukan panggilan dengan ponsel Anda sendiri. Niat asli dari fungsi panggilan juga mirip dengan ini. Izinkan saya menggunakan kode untuk mensimulasikan skenario aplikasinya:
var frog = {name: 'frog', katakanlah: function () {alert (this.name); }} var rabbit = {name: 'Rabbit'} frog.say.call (rubbit) // kelinciRubbit adalah objek bodoh, tetapi jika dia ingin menyebutkan namanya, tidak mungkin mencapainya dengan kemampuannya sendiri. Untungnya, ia memiliki teman baik bernama Frog, yang dapat berbicara. Jadi, Rubbit meminta Katak untuk menyadari keinginan ini untuk itu. Parameter pertama Frog.say.call () harus diisi pada orang yang mengeluarkan permintaan, dan pengacara suka menyebutnya klien. Berikut adalah rubbit permintaan katak untuk mengatakan nama untuk itu, jadi isi rubbit. Dengan cara ini, ketika mengatakan, nama rubbit akan dicari, bukan nama katak. Seperti apa rasanya jika saya mengisi katak di sini? Ini seperti meminta diri Anda untuk melakukan sesuatu, dan memberi makan sendiri garam. Anda dapat mencobanya:
var frog = {name: 'frog', katakanlah: function () {alert (this.name); }} var rabbit = {name: 'Rabbit'} frog.say.call (katak) // katakMemberi makan sendiri sekantong garam harus menjadi nama Anda, dan itu tidak terduga. Mari kita lihat penggunaan panggilan klasik:
// Konversi parameter menjadi frog fungsi objek array nyata () {var arr = [] .slice.call (argumen); console.log (argumen.Setelah panggilan ini, kita dapat menggunakan objek argumen sebagai objek array. Ada banyak cara untuk menggunakan panggilan. Jika Anda membuka kode sumber jQuery, Anda dapat dengan mudah menemukan banyak tempat untuk menggunakannya. Saya tidak akan mencantumkan semuanya di sini, tetapi saya akan kembali ke tempat kejadian sebelum kami. Terlalu mudah untuk meminjam panggilan telepon. Setelah melakukan panggilan telepon, saya pasti ingin mengembalikan sesuatu. Lagi pula, saya telah berkeliaran selama bertahun -tahun dan belum berbakti kepada orang tua dan telah membeli beberapa spesialisasi lokal untuk kembali. Itu pasti bagus. Namun, tekanan kehidupan di luar begitu hebat sehingga selain bekerja, ada juga lembur setiap hari. Jika Anda mengambil cuti, gaji Anda tidak hanya akan dikurangkan, tetapi Anda juga harus menghabiskan banyak biaya perjalanan. Jumlah uang ini mungkin cukup bagi orang tua untuk menghabiskan satu tahun di rumah. Tidak hemat biaya untuk memikirkannya, jadi saya memikirkan fungsi panggilan lagi. Meminta bantuannya, itu adalah pilihan yang sangat bijak untuk mengambilnya kembali, dan tidak mengisi daya, tidak membatasi jumlahnya, tidak membatasi bobot, dan itu dapat membawa sebanyak yang Anda miliki. Saya akan menggunakan kode untuk menunjukkannya lagi:
var frog = {name: 'frog', send: function (uang, makanan, susu, suagate) {alert (uang+makanan+susu+suagate); }} var rabbit = {name: 'rabbit'} frog.send.call (rubbit, 'uang', 'makanan', 'susu', 'suagate')Jika Anda kaya dan disengaja, Anda bahkan dapat mengirim beberapa iPhone6 Plus atau sesuatu yang kembali. .^_^.
Berbicara tentang ini, panggilannya hampir berakhir. Saya tidak tahu apakah drama adegan di atas membuat Anda mengerti apa panggilan itu. Jika itu hanya membangkitkan kerinduan Anda, maka saya minta maaf.
Panggilan juga memiliki saudara tiri yang disebut Apply. Jika Anda memahami penggunaan panggilan, maka terapkan sebenarnya adalah hal yang sama. Satu -satunya perbedaan adalah bahwa ketika Apply tidak suka meneruskan hal -hal, tampaknya sangat merepotkan untuk memasukkan satu hal ke dalam tas, dan itu tidak ramah lingkungan. Jadi dia menyediakan kotak besar untuk hal -hal, dan letakkan semua hal yang ingin Anda sampaikan di dalam kotak yang disediakannya. Kotak besar ini adalah array. Jika contoh di atas dilakukan dengan Apply, seperti ini:
var frog = {name: 'frog', send: function (uang, makanan, susu, suagate) {alert (uang+makanan+susu+suagate); }} var rabbit = {name: 'Rabbit'} // Perhatikan perbedaan parameter frog.send.Apply (rubbit, ['Money', 'Food', 'Milk', 'Suagate'])Di atas adalah masa lalu dan masa kini yang berlaku, panggil. Tapi secara tak terduga, melamar dan ayah Call menghasilkan banyak uang di real estat beberapa tahun yang lalu, dan ada seorang anak haram bernama Bind di luar. Meskipun kedua saudara laki -lakinya menelepon dan melamar debutnya beberapa tahun kemudian, kemampuan mereka tidak boleh diremehkan. Namun, identitasnya tidak diakui di beberapa tempat. Misalnya, IE6. Selanjutnya, saya akan menggunakan kode untuk menunjukkan keterampilannya:
var name = 'rubbit'; var frog = {name: 'frog', katakanlah: function () {setTimeOut (function (money, susu) {alert (this.name+uang+susu)} .bind (ini, 'uang', 'susu'), 1000)}} frog.say ();Melalui perbandingan, ditemukan bahwa BIND dapat terhubung langsung ke fungsi () {}. Ini setara dengan menyimpan panggilan dan berlaku, dan secara langsung menentukan kepala sekolah dan parameter yang akan dilewati setelah fungsi. Dalam hal gaya melewati sigma, itu lebih seperti panggilan.
Mengenai Bind, mari kita lihat penggunaan klasik lain:
var obj = {name: 'frog'} document.addeventListener ('klik', function () {alert (this.name); // frog} .bind (obj), false);Singkatnya, terapkan, panggil, ikat, kesamaan antara ketiga bersaudara ini adalah:
1. Parameter pertama adalah ruang lingkup pemerintah, yaitu wilayah yang merupakan pekerjaannya.
2. Semua parameter dapat dilewati
Perbedaannya adalah:
Terapkan, panggilan memiliki kompatibilitas yang lebih baik, mengikat beberapa versi browser yang lebih rendah tidak mendukungnya.
Parameter yang dilewati oleh Apply harus dibungkus dalam array, sementara panggilan dan bind terdaftar satu per satu.
Sudahkah Anda memperoleh pemahaman yang lebih dalam tentang penggunaan tiga fungsi yang disebut, berlaku, dan mengikat? Saya harap artikel ini dapat membantu Anda.