Terapkan () Definisi Metode
Metode Apply () dari fungsi dan metode panggilan memiliki fungsi yang sama, tetapi perbedaannya adalah bahwa parameter yang diterima berbeda.
Metode Apply () menerima dua parameter, satu adalah objek dan yang lainnya adalah array parameter.
terapkan () fungsi
1. Digunakan untuk memperluas ruang lingkup fungsi
Contoh:
var color = 'red'; var o = {color: 'blue'}; function Saycolor () {console.log (this.color);} waycolor (); // "red" waycolor.apply (o); // "blue"Di sini, fungsi tersebut terikat secara dinamis pada objek O melalui metode Apply (). Pada saat ini, ini menunjuk pada objek O dan mendapatkan hasil "biru".
2. Objek tidak perlu memiliki hubungan kopling dengan metode.
Mari kita berikan contoh kopling di bawah ini untuk melihat cara menyelesaikan kopling ini dengan menerapkan.
var color = 'red'; var o = {color: 'blue'}; function Saycolor () {console.log (this.color);} o.saycolor = waycolor; o.saycolor (); // "blue"Di sini, fungsi pertama kali ditempatkan di objek O, dan objek dan metode digabungkan secara ketat bersama -sama, dan panggilan metode harus melewati objek o.
Ini tidak sefleksibel menggunakan metode apply () dan call ().
Refactor kode di atas untuk mendapatkan kode dalam contoh sebelumnya.
var color = 'red'; var o = {color: 'blue'}; function Saycolor () {console.log (this.color);} waycolor (); // "red" waycolor.apply (o); // "blue"Tidak ada metode yang terikat pada objek di sini, tetapi ketika perlu menggunakannya, menggunakan metode Function's Apply atau Call untuk mengikatnya secara dinamis.
Tidak ada kopling antara objek dan metode. Di sini juga dapat dilakukan melalui metode Bind () yang disediakan oleh ES5.
3. Implementasikan transfer parameter fungsi parameter variabel
Fungsi berikut untuk menghitung nilai rata -rata dari angka apa pun
rata -rata (,,); rata -rata (); rata -rata (,,,,,,,,, rata -rata (,,,,,,,,,); rata -rata (,,,,,,,,););
Fungsi rata -rata adalah contoh yang disebut parameter yang dapat berubah atau fungsi elemen yang dapat berubah (jumlah elemen fungsi mengacu pada jumlah parameter yang diinginkan).
Tentu saja, fungsi ini juga dapat ditulis dalam bentuk array penerima.
rata -rataofarray ([,,]); rata -rataofarray ([]); rata -rata dariRay ([,,,,,,,,]); rata -rataofarray ([,,,,,,,,,,,]);
Fungsi yang menggunakan parameter variabel lebih ringkas dan elegan. Fungsi parameter variabel memiliki sintaks yang nyaman, setidaknya memungkinkan penelepon untuk mengetahui sebelumnya berapa banyak parameter yang disediakan.
Jika saya memiliki array seperti ini
skor var = getAllscores ();
Bagaimana cara menghitung nilai rata -rata menggunakan fungsi rata -rata?
1. Versi Fungsi Parameter Variabel.
Pada saat ini, dapat digunakan bersama dengan metode Apply (). Karena fungsi tidak menggunakan referensi variabel ini, kami melewati nol untuk parameter pertama. Kodenya adalah sebagai berikut:
skor var = getAllScores (); rata -rata.Apply (null, skor);
2. Parameter langsung dalam bentuk array
Di sini Anda dapat langsung melewati parameter array.
skor var = getAllscores (); rata -rataofarray (skor);
Saya pribadi berpikir kedua bentuk di atas baik -baik saja, tetapi yang kedua lebih sederhana. Ketahui lebih banyak tentang suatu metode, yang dapat dengan mudah ditangani saat menemukan fungsi yang ditulis oleh orang lain tanpa refactoring kode. Manfaat ini bahkan lebih.
4. Menerapkan Nilai Transfer Metode Parameter Variabel
Contoh: Objek buffer berisi metode append parameter yang dapat berubah, yang ditambahkan ke array keadaan di dalam fungsi.
var buffer = {state: [], append: function () {for (var i =, n = arguments.length; i <n; i ++) {this.state.push (argumen [i]);}}};Pada saat ini, metode Append dapat menerima beberapa parameter.
buffer.append ('halo,'); buffer.append ('firtname', '', 'lastname', '!'); buffer.append ('newline');Bentuk seperti
buffer.append (arg1, arg2, arg3, ...)
Dengan parameter metode Apply ini, kami dapat menentukan array yang dapat dihitung untuk memanggil metode Append.
buffer.append.apply (buffer, getInputStrings ());
Catatan: Buffer di sini penting. Jika objek yang berbeda dilewatkan, metode Append akan mencoba memodifikasi properti negara dari objek yang salah.
petunjuk
• Gunakan metode Apply untuk menentukan array parameter yang dapat dihitung untuk memanggil fungsi dengan parameter yang dapat berubah
• Gunakan parameter pertama dari metode Apply untuk menyediakan penerima untuk metode parameter variabel
Lampiran 1
fungsi rata -rata
fungsi rata -rata () {var args = []. slice.call (argumen); var sum = args.reduce (function (prev, cur) {return prev+cur;}); return parseInt (sum/args.length,);}Fungsi rata -rata dan fungsi
Function AverageOfArray (arr) {var sum = arr.reduce (function (prev, cur) {return prev+cur;}); return parseInt (sum/arr.length,);}Metode ES5 Bind ()
Metode ini membuat instance suatu fungsi yang nilainya terikat pada nilai yang diteruskan ke fungsi Bind ().
Misalnya
var color = 'red'; var o = {color: 'blue'}; function Saycolor () {console.log (this.color);} var osaycolor = waycolor.bind (o); osaycolor (); // "biru"Kompatibel dengan versi yang lebih rendah, lihat versi berikut:
if (!Function.prototype.bind) {Function.prototype.bind = function(oThis) {if (typeof this !== 'function') {// closest thing possible to the ECMAScript // internal IsCallable functionthrow new TypeError('Function.prototype.bind - what is trying to be bound is not callable');}var aArgs = [] .slice.call (argumen,), ftobind = this, fnop = function () {}, fbound = function () {return ftobind.Apply (instance ini dari fnop? this: othis, aargs.concat (array.prototype.slice.call (arguments); prototipe propertifnop.prototype = this.prototype; } fbound.prototype = fnop baru (); return fbound;};}