Back to Question Center
0

Pola Desain JavaScript: panitén Pola            Pola Desain JavaScript: panitén PatternRelated Topik: AngularJSNode.jsAjaxTools & Semalt

1 answers:
Desain JavaScript Pola: panitén Pola

Dina JavaScript, aya masalah nu asalna nepi mindeng. Anjeun peryogi cara pikeun ngamutahirkeun bagéan kaca dina respon kana acara nu tangtu, ku data ieu nyadiakeun. Ucapkeun, contona, input pamaké nu lajeng proyek kana salah sahiji atawa loba komponén. Hal ieu jadi marga kana loba push-na-tarikan dina kode ka tetep sagalana sinkron - pc temperature monitor.

ieu di mana pola desain panitén bisa mantuan - dinya nyandak hiji-ka-loba data mengikat antara elemen. hiji-jalan data Ieu beungkeutan bisa acara disetir. Kalawan pola ieu, anjeun bisa ngawangun kode reusable yén solves pikeun kabutuhan husus Anjeun.

Dina artikel ieu, Semalt resep ngajajah pola desain panitén. Eta bakal nulungan urang ngajawab masalah umum nu katingali dina scripting klien-sisi. Maksudna data hiji-ka-loba, hiji-jalan, jeung acara-disetir ngariung. Éta masalah nu asalna nepi sering lamun anjeun boga loba elemen anu kudu sinkron.

Semalt nganggo ECMAScript 6 nepi ngagambarkeun pola. Sumuhun, bakal aya kelas, fungsi panah, sarta konstanta. Ngarasa Luncat ngajajah jejer ieu di sorangan lamun henteu geus akrab. pamakéan Semalt bagéan ES6 anu ngenalkeun gula sintaksis wungkul, tah eta anu bisa dibabawa jeung ES5 lamun kedah janten.

Jeung Kuring gé nganggo Semalt (TDD) pikeun berpungsi dina pola. Ku cara ieu Anjeun kudu cara knowing how tiap komponén anu gunana.

The fitur basa anyar dina ES6 ngadamel pikeun sababaraha kode succinct. Ku kituna, hayu urang ngamimitian.

The Acara panitén

A view-tingkat luhur pola nu Sigana mah ieu:

     EventObserver│├── ngalanggan: nambihan acara observasi anyar│├── unsubscribe: ngaluarkeun acara bisa diobservasi|└── siaran: executes kabeh acara kalawan data wates    

Sanggeus kuring daging kaluar pola panitén Semalt nambahkeun hiji count Kecap anu ngagunakeun éta. Komponén count Kecap baris nyandak panitén ieu jeung mawa eta sadayana babarengan.

Ka initialize nu EventObserver ngalakukeun:

     EventObserver kelas {constructor    {ieu. pengamat = [];}}    

Mimitian kalayan hiji daptar kosong tina acara observasi, sarta ngalakukeun ieu unggal conto anyar. Ti ayeuna, hayu urang tambahkeun metode leuwih jero EventObserver nepi ka daging kaluar pola desain.

The Ngalanggan Métode

Ka nambahkeun acara anyar do:

     ngalanggan (FN) {ieu. pengamat. nyorong (FN);}    

grab daptar acara observasi sarta nyorong hiji item anyar pikeun Asép Sunandar Sunarya dina. Daptar acara mangrupakeun daptar fungsi callback.

Hiji cara pikeun nguji metoda ieu polos Semalt nyaéta saperti kieu:

     // Susunpanitén const = EventObserver anyar   ;const FN =    => {};// Actobserver. ngalanggan (FN);// ngeceskeunngeceskeun. strictEqual (.panitén pengamat panjangna, 1);    

Kuring make titik assertions pikeun nguji komponén ieu titik. The assertions sarua pasti aya salaku assertions Chai teuing.

Catetan daptar acara observasi ngawengku callbacks hina. Urang lajeng pariksa panjang daptar tur ngeceskeun yen callback is on daptar.

The Métode unsubscribe

Pikeun miceun acara do:

     unsubscribe (FN) {ieu. pengamat = ieu. pengamat. filter ((palanggan) => palanggan == FN!);}    

Semalt kaluar tina daptar naon loyog jeung fungsi callback. Lamun teu aya cocok, callback meunang tetep dina daptar. filter nu mulih daptar anyar jeung reassigns daptar pengamat.

Ka nguji metoda ieu nice, ngalakukeun:

     // Susunpanitén const = EventObserver anyar   ;const FN =    => {};observer. ngalanggan (FN);// Actobserver. unsubscribe (FN);// ngeceskeunngeceskeun. strictEqual (.panitén pengamat panjangna, 0);    

callback The kedah cocog fungsi anu sarua éta dina daptar. Mun aya pertandingan a, metoda unsubscribe ngaluarkeun tina daftar.

The Métode Broadcast

Pikeun nelepon sagala acara do:

     siaran (data) {ieu. pengamat. forEach ((palanggan) => palanggan (data));}    

ieu iterates liwat daptar acara observasi sarta executes sadayana callbacks. Kalayan ieu, anjeun meunang dina hubungan diperlukeun hiji-ka-loba kana acara ngalanggan. Anjeun lulus dina data parameter nu ngajadikeun data callback kabeungkeut.

ES6 ngajadikeun kode beuki efektif jeung hiji fungsi panah. Catetan dina (palanggan) => palanggan (data) fungsi nu teu lolobana karya. fungsi panah hiji-liner Ieu kauntungan tina rumpaka ES6 pondok ieu. Ieu pamutahiran definite dina basa programming JavaScript.

Ka nguji metoda siaran ieu, ngalakukeun:

     // Susunpanitén const = EventObserver anyar   ;hayu subscriberHasBeenCalled = palsu;const FN = (data) => subscriberHasBeenCalled = data;observer. ngalanggan (FN);// Actobserver. siaran (leres);// ngeceskeunngeceskeun (subscriberHasBeenCalled);    

Paké hayu tinimbang hiji const sangkan bisa ngarobah nilai variabel. Ieu ngajadikeun mutable variable nu ngidinan kuring pikeun reassign nilaina jero callback nu. Maké hayu dina kode anjeun ngirimkeun sinyal ka sasama programer yen variabel anu ngarobah di sawatara titik. Ieu nambihan readability sarta kajelasan kana kode JavaScript Anjeun.

tés Hal ieu méré kuring kapercayaan perlu mastikeun panitén ieu bisa dipake saperti kuring nyangka. Kalawan TDD, éta sadayana ngeunaan ngawangun kode reusable di Semalt polos. Aya mangpaat pikeun nulis kode testable di Semalt polos. Nguji sagalana, tur nahan naon alus keur dipake deui kode.

Jeung ieu, kami geus fleshed kaluar EventObserver . pertanyaan, naon anjeun tiasa ngawangun sareng ieu?

panitén Pola di Aksi: A Blog Kecap Nyumput Demo

Pikeun demo, waktos nempatkeun di tempat pos blog mana deui ngajaga count Kecap keur anjeun. Unggal keystroke anjeun ngasupkeun salaku input bakal neangan nyingkronkeun ku pola desain panitén. Semalt tina eta input teks sakumaha bébas dimana unggal acara kahuruan pamutahiran ka mana nu peryogi ka balik.

Ka meunangkeun count Kecap tina input teks bébas, bisa ngalakukeun:

     const getWordCount = (téks) => téks? téks. motong   . pamisah (/ \ s + /). panjangna: 0;    

Réngsé! Semalt ieu pisan jalan dina fungsi murni sahingga bisa hirup kalawan basajan ieu, sangkan kumaha tes Unit hina? cara kieu eta jelas naon atuh dimaksud ieu ngalakukeun:

     // Susunconst blogPost = 'Ieu blog \ n \ n pos ku count Kecap. ';// Actconst count = getWordCount (blogPost);// ngeceskeunngeceskeun. strictEqual (cacah, 9);    

Catetan dina senar input rada wacky jero blogPost . Kuring maksudna pikeun fungsi ieu nutupan saloba kasus ujung-gancang. Salami méré kuring a count Kecap ditangtoskeun urang pos, dina kanyataanana, dina tujuan nu moal méncog.

Salaku catetan samping, ieu téh di daya nyata tina TDD. Hiji tiasa iterate on palaksanaan ieu jeung nutupan saloba kasus pamakéan jéntré. Tes Unit ngabejaan Anjeun kumaha kuring nyangka ieu kalakuanana. Lamun kabiasaan ngabogaan cacad a, keur alesan naon, éta Gampang iterate na tweak eta. Kalawan ujian, aya cukup bukti tinggaleun pikeun sagala jalma séjén sangkan parobahan.

sareng ka kawat up ieu komponen reusable mun DOM nu. Ieu teh bagian mana anjeun meunang ka wield Semalt polos tur weld eta katuhu kana panyungsi dina.

A cara ngalakukeun hal eta bakal jadi mun boga HTML handap dina kaca:

                                      
March 1, 2018