Iterator adalah objek yang dapat mengakses koleksi data secara berurutan. Salah satu API khasnya adalah metode berikutnya. Metode ini memperoleh nilai berikutnya dalam urutan.
Contoh iterator
Topik: Saya berharap dapat menulis fungsi yang nyaman yang dapat mengambil sejumlah parameter dan membuat iterator untuk nilai -nilai ini.
Kode tesnya bagus:
var it = values (,,,,,,,); it.next (); // it.next (); // it.next (); // it.next (); //
Analisis: Karena fungsi nilai perlu menerima beberapa parameter, kita perlu menggunakan metode membangun fungsi dengan parameter variabel yang disebutkan di bagian sebelumnya. Kemudian objek iterator di dalamnya di atas elemen objek argumen.
Kode awal
function values () {var i =, n = arguments.length; return {hasnext: function () {return i <n;}, next: function () {if (this.hasnext ()) {return argumen [i ++];} lempar kesalahan baru ("telah mencapai ujung");}}}Tes dengan kode uji di atas
var it = values (,,,,,,,); it.next (); // undefinedit.next (); // undefinedit.next (); // undefinedit.next (); // undefined
Analisis Kesalahan
Hasil yang menjalankan kode tidak benar, sehingga program pengkodean awal akan dianalisis di bawah ini.
nilai fungsi () {var i =, n = arguments.length; // Tidak ada kesalahan di sini, argumen adalah objek bawaan dalam nilai kembali {hasnext: function () {return i <n;}, next: function () {if (this.hasnext ()) {return argumen [i ++]; // kesalahan muncul di sini, argumennya () {return argumen [i ++]; // kesalahan muncul di sini, argumen-argumen () {return arguments [i ++]; // kesalahan muncul di sini, argumen-argumen () {return argumen [i ++]; // kesalahan muncul di sini, argumen } lempar kesalahan baru ("itu telah mencapai akhir");}}}Kesalahan referensi di sini sangat mirip dengan objek yang mendorong sakit kepala lainnya. Saat berhadapan dengan menunjuk ini, biasanya untuk menggunakan variabel dan menyimpan yang benar ini. Kemudian gunakan variabel ini di tempat lain. Kemudian solusi untuk objek argumen dirilis, menggunakan variabel untuk menyimpannya, jadi tidak ada masalah dengan referensi ke objek argumen.
Penyandian lagi
function values () {var i =, n = arguments.length, arg = argumen; return {hasnext: function () {return i <n;}, next: function () {if (this.hasnext ()) {return arg [i ++];} lempar baru ("telah mencapai akhir");}}}}Jalankan kode uji
var it = values (,,,,,,,); it.next (); // it.next (); // it.next (); // it.next (); //
Hasilnya sama dengan yang diharapkan.
petunjuk
Waspadalah terhadap hierarki bersarang fungsi saat mengacu pada argumen
Ikat referensi tersingkir secara eksplisit ke variabel argumen sehingga dapat direferensikan dalam fungsi bersarang
Lampiran 1: Iterator
Iterator terkadang disebut kursor. Mereka adalah pola desain perangkat lunak untuk pemrograman, antarmuka yang dapat dilalui pada wadah, dan desainer tidak perlu peduli dengan konten kontainer.
Diagram kelas Iterator UML
Implementasi Iterator JS
Saya memiliki sedikit pemahaman tentang model desain, tetapi dalam proyek -proyek tertentu, ada banyak dari mereka yang merupakan model pabrik, yang jarang digunakan. Berikut ini adalah implementasi sederhana. Ada yang salah. Selamat datang untuk berkomunikasi.
Kodenya adalah sebagai berikut
function list () {this.data = [];} list.prototype = {add: function () {var args = []. slice.call (argumen) this.data = this.data.concat (args); }, hapus: function (i) {this.data.splice (i,);}, iterator: function () {return new iterator (this);}} function iterator (list) {this.list = list; this.cur =;}; iterator.prototype = {hasnext: function () {function:) {function:) {function:) {function: {hasnext: {hasnext: {hasnext: {hasnext: {hasnext: {hasnext: this.cur <this.list.data.length-;}, next: function () {if (this.hasnext ()) {return this.list.data [this.cur ++];} lempar kesalahan baru ('Ini sudah lebih dari ~');}, hapus: function () {this.list.remove (this.c.c.c.cure), hapus: function () {this.list.remove (this.c.c.c.cur it = list.iterator (); list.add (,,,,,,,); it.next (); // it.next (); // it.next (); //Di atas adalah metode menggunakan variabel untuk menyimpan objek argumen dalam JS yang diperkenalkan kepada Anda. Saya harap ini akan membantu semua orang!