Metode panggilan fungsi
Sebelum berbicara tentang tiga bersaudara yang berlaku, panggil dan ikat di JavaScript, saya ingin berbicara tentang metode fungsi yang panggilan apa:
• sebagai fungsi
• Sebagai metode
• Sebagai konstruktor
• Secara tidak langsung menelepon melalui metode panggilan () dan terapkan ()
Kita semua tahu tiga metode panggilan sebelumnya dan tidak berada dalam ruang lingkup artikel ini, jadi kita tidak akan membicarakannya.
Mari Bicara Tentang Metode Panggilan Keempat
Panggilan tidak langsung melalui panggilan () dan terapkan ()
Bahkan, kita dapat menganggap kedua fungsi ini sebagai metode objek tertentu, dan secara tidak langsung memanggil fungsi dengan memanggil metode:
fungsi f () {} f.call (o); f.Apply (o);Parameter pertama panggilan () dan apply () adalah objek induk untuk memanggil fungsi. Ini adalah konteks panggilan, dan referensi untuk itu diperoleh melalui ini dalam tubuh fungsi.
Jadi apakah mereka sama, atau apakah ada perbedaan, dan juga metode BIND? Jangan khawatir, mari kita analisis perbedaan dan koneksi antara ketiga di bawah ini secara rinci.
panggilan()
Metode Call () menentukan pointer spesifik ini (idiot, jangan ganggu saya tentang kebenarannya) dan parameter untuk metode yang menyebutnya. Misalnya, ada fungsi seperti ini:
var fn = fungsi (arg1, arg2) {console.log (this, arg1, arg2); }Saya akan menyebutnya:
fn.call (null, 'skylor', 'min'); //1fn.call(undefined, 'Skylor', 'Min'); // 2var fx = function () {} fn.call (fx, 'skylor', 'min'); // 3Apa nilai pengembalian dari ketiga metode panggilan ini? Tidak ada omong kosong, silakan lihat:
1. NULL "Skylor" "Min" 2. "Skylor" yang tidak ditentukan "Min" 3. FX "Skylor" "Min"
Apakah ini masalahnya? Anda pintar, pergi ke konsol browser dan mencobanya. Aku akan pergi, kamu seorang penipu, itu tidak seperti ini:
chrome1. Jendela "Skylor" "Min" 2. Jendela "Skylor" "Min" 3. FX "Skylor" "Min"
Oke, Anda pintar. Tapi ini sudah menggambarkan metode panggilan dengan sangat baik. (Jendela sangat canggih, Microsoft terkikik ...)
Kami memperhatikan bahwa metode panggilan, parameter pertama adalah menentukan pointer ini, dan setiap parameter setelah itu menentukan parameter yang diperlukan. Perhatikan bahwa saya menggunakan "masing -masing", yang berarti Anda memerlukan beberapa parameter dan ingin memanggil fungsi, dan menulis setiap parameter ke dalamnya satu per satu.
menerapkan()
apply () adalah saudara panggilan (). Tempat -tempat lain terlihat sama, mereka semua adalah laki -laki, tetapi mereka berbeda di satu tempat. Mari kita lihat contoh terlebih dahulu:
fn.Apply (null, ['Skylor', 'Min']); //1fn.Apply(fx, ['Skylor', 'Min']); // 2
Saudara, apakah Anda salah menulisnya? Ada lebih banyak tanda kurung. Tidak, tidak, tidak, inilah yang membuatnya terlihat berbeda dari panggilan. Parameter keduanya adalah array parameter yang diperlukan.
mengikat()
Bind (), bukan mereka tiga bersaudara, saya mengerti ini, Blabla ... tidak, tidak, itu adalah saudara yang disumpah yang telah menjadi saudara bersumpah dengan melamar dan menelepon, bukan saudara sungguhan.
Tentu saja, metode BIND juga memungkinkan Anda untuk menentukan pointer ini, tetapi alih -alih memanggil fungsi, mengembalikan fungsi (atau salinan) yang menyebutnya, dan menentukan pointer dan parameter spesifik ini ke fungsi ini. Konvensi, contoh menggambarkan segalanya:
var fnbound = fn.bind (null, 'skylor', 'min');
Pada saat ini, fnbound adalah fungsi, fungsi lain dengan menunjuk ke null dan parameternya adalah ['Skylor', 'Min']. Ditelepon:
fnbound ();
hasil:
Null, 'Skylor', 'Min'
Jangan khawatir tentang jendela dengan saya. . . . .
Perbedaan antara Bind dan dua bersaudara lainnya adalah bahwa ia tidak menyebut fungsi, tetapi mengembalikan fungsi baru. Demikian pula, ini juga menentukan pointer dan parameter ini. Metode menentukan parameter sama dengan panggilan, dan itu datang satu per satu.
Mari kita dapatkan contoh terakhir:
var shoppingCart = (function () {var _calculatePrice = function () {return this.price * this.amount;}; return {calculatePrice: _calculatePrice}}) (); var barang = {name: 'hammer', harga: 199, jumlah: 2}; shoppanCart.calculatePrice.Ini berakhir. Lai
Di atas adalah seluruh konten Apply, Call dan Bind dalam JavaScript yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!