Rumah > Artikel > hujung hadapan web > Penjelasan terperinci tentang paradigma pengaturcaraan dalam jQuery_jquery
Artikel ini menganalisis paradigma pengaturcaraan dalam jQuery secara terperinci. Kongsikan dengan semua orang untuk rujukan anda. Butirannya adalah seperti berikut:
Wajah pengaturcaraan bahagian hadapan penyemak imbas telah mengalami perubahan yang mendalam sejak tahun 2005. Ini tidak bermakna bahawa sejumlah besar perpustakaan asas dengan fungsi yang kaya telah muncul, membolehkan kami menulis kod perniagaan dengan lebih mudah merupakan perubahan besar dalam cara kita melihat teknologi hadapan, dengan kesedaran yang jelas tentang cara untuk melancarkan produktiviti pengaturcara dengan cara khusus hadapan. Di sini, kami akan memberikan pengenalan ringkas kepada paradigma pengaturcaraan dan teknik biasa yang muncul dalam JavaScript berdasarkan prinsip pelaksanaan kod sumber jQuery.
1. AJAX: keadaan kegigihan, kemas kini tak segerak
Pertama, sedikit sejarah.
A. Pada tahun 1995, Brendan Eich dari Netscape membangunkan bahasa JavaScript, yang merupakan bahasa skrip berasaskan prototaip yang dinamik, ditaip lemah.
B. Pada tahun 1999, Microsoft IE5 telah dikeluarkan, yang termasuk kawalan XMLHTTP ActiveX.
C. Microsoft IE6 telah dikeluarkan pada tahun 2001, sebahagiannya menyokong standard DOM tahap 1 dan CSS 2.
D. Douglas Crockford mencipta format JSON pada tahun 2002.
Pada ketika ini, boleh dikatakan bahawa elemen teknikal yang mana Web 2.0 bergantung pada dasarnya telah terbentuk, tetapi ia tidak serta-merta memberi kesan yang ketara kepada keseluruhan industri. Walaupun beberapa teknik "pemuatan semula halaman separa tak segerak" diedarkan secara rahsia di kalangan pengaturcara, malah melahirkan perpustakaan kelas yang besar dan besar seperti bindows, secara amnya, bahagian hadapan dianggap sebagai paya yang tandus dan kotor, dengan hanya teknologi Backend yang menjadi raja. Apa yang hilang?
Apabila kita melihat kembali kod js sebelum 2005 dari perspektif hari ini, termasuk yang ditulis oleh mereka yang berbakat pada masa itu, kita dapat merasakan dengan jelas kelemahan mereka dalam kawalan program. Bukannya teknologi js sebelum tahun 2005 mempunyai masalah dengan sendirinya, cuma ia bertaburan di peringkat konseptual, tidak mempunyai konsep yang bersatu, atau tidak mempunyai gaya dan jiwa unik mereka sendiri. Pada masa itu, kebanyakan orang dan kebanyakan teknologi cuba mensimulasikan bahasa berorientasikan objek tradisional dan menggunakan teknologi berorientasikan objek tradisional untuk melaksanakan tiruan model GUI tradisional.
2005 adalah tahun perubahan dan tahun penciptaan konsep. Dengan keluaran satu siri aplikasi interaktif yang menyegarkan oleh Google, artikel "Ajax: A New Approach to Web Applications" oleh Jesse James Garrett telah diedarkan secara meluas. Ajax, konsep khusus front-end, dengan cepat menyatukan banyak amalan bertaburan di bawah slogan yang sama, mencetuskan anjakan paradigma dalam pengaturcaraan Web. Seperti kata pepatah, jika nama tidak betul, kata-kata tidak akan betul Sekarang orang yang tidak dikenali boleh mencari organisasi. Sebelum Ajax, orang ramai telah lama menyedari bahawa ciri penting seni bina B/S ialah ruang keadaan pelayar dan pelayan telah dipisahkan Walau bagaimanapun, penyelesaian umum adalah untuk menyembunyikan perbezaan ini dan menyegerakkan keadaan latar depan ke latar belakang. Pemprosesan logik bersatu, seperti ASP.NET. Oleh kerana kekurangan corak reka bentuk matang untuk menyokong kegigihan keadaan latar depan, objek js yang dimuatkan akan dipaksa untuk dibuang apabila menukar halaman Dengan cara ini, siapa yang boleh mengharapkan ia menyelesaikan sebarang kerja yang rumit?
Ajax dengan jelas menyatakan bahawa antara muka sebahagiannya dimuat semula dan keadaan berada di latar depan, yang menggalakkan keperluan: objek js perlu wujud di latar depan untuk masa yang lebih lama. Ini juga bermakna keperluan untuk mengurus objek dan fungsi ini dengan berkesan, yang bermaksud teknologi organisasi kod yang lebih kompleks, yang bermaksud keinginan untuk modulariti dan asas kod biasa.
Sebenarnya terdapat sangat sedikit bahagian kod sedia ada jQuery yang sebenarnya berkaitan dengan Ajax (menggunakan kawalan XMLHTTP untuk mengakses data pemulangan latar belakang secara tidak segerak), tetapi tanpa Ajax, jQuery tidak akan mempunyai sebab untuk wujud sebagai pangkalan kod awam.
2. Modularisasi: mengurus ruang nama
Apabila sejumlah besar kod dijana, konsep paling asas yang kita perlukan ialah modularisasi, iaitu mengurai dan menggunakan semula kerja. Kunci kepada kerja reput ialah hasil kerja bebas setiap orang boleh disepadukan bersama. Ini bermakna setiap modul mesti berdasarkan konsep asas yang konsisten dan boleh berinteraksi Maksudnya, ia harus berdasarkan asas kod biasa, melindungi ketidakkonsistenan pelayar asas dan melaksanakan lapisan abstraksi bersatu, seperti a. mekanisme pengurusan acara bersatu. Lebih penting daripada asas kod bersatu, mesti tiada percanggahan nama antara modul. Jika tidak, kedua-dua modul tidak akan berfungsi bersama walaupun tanpa sebarang interaksi antara mereka.
Salah satu titik jualan utama yang dipromosikan oleh jQuery pada masa ini ialah kawalannya yang baik ke atas ruang nama. Ini lebih penting daripada menyediakan titik fungsi yang lebih dan lebih lengkap. Modulariti yang baik membolehkan kami menggunakan semula kod dari mana-mana sumber, dan kerja semua orang boleh dikumpul dan ditindih. Dan pelaksanaan fungsi hanyalah masalah beban kerja sementara. jQuery menggunakan varian corak modul untuk mengurangkan kesan pada ruang nama global, hanya menambah objek jQuery (iaitu, $fungsi) pada objek tetingkap.
Kod corak modul yang dipanggil adalah seperti berikut. Kuncinya ialah menggunakan fungsi tanpa nama untuk mengehadkan skop pembolehubah sementara.
//Pembolehubah dan fungsi peribadi
var privateThing = 'rahsia',
PublicThing = 'bukan rahsia',
changePrivateThing = function() {
privateThing = 'rahsia super';
},
sayPrivateThing = function() {
console.log(privateThing);
changePrivateThing();
};
// Kembali ke API awam
kembali {
PublicThing : publicThing,
sayPrivateThing : sayPrivateThing
}
})();
JS sendiri tidak mempunyai struktur pakej, tetapi selepas percubaan selama bertahun-tahun, industri secara beransur-ansur menyatukan pemahamannya tentang pemuatan pakej, membentuk penyelesaian seperti perpustakaan RequireJs yang telah mendapat konsensus tertentu. jQuery boleh disepadukan dengan baik dengan perpustakaan RequireJS untuk mencapai pengurusan pergantungan modul yang lebih lengkap. http://requirejs.org/docs/jquery.html
3. Magic$: Promosi objek
Apakah yang anda fikirkan apabila anda mula-mula melihat fungsi $? Teori pengaturcaraan tradisional sentiasa memberitahu kita bahawa penamaan fungsi harus tepat dan harus menyatakan dengan jelas niat pengarang malah ia mendakwa bahawa nama panjang adalah lebih baik daripada nama pendek kerana ia mengurangkan kemungkinan kekaburan. Tetapi apakah $? Kod bercelaru? Mesej yang disampaikannya terlalu kabur dan samar-samar. $ telah dicipta oleh perpustakaan prototype.js dan benar-benar fungsi ajaib kerana ia boleh meningkatkan nod DOM primitif menjadi objek dengan tingkah laku yang kompleks. Dalam pelaksanaan asal prototype.js, fungsi $ ditakrifkan sebagai
Ini pada asasnya sepadan dengan formula berikut
e = $(id)
Ini bukan sahaja singkatan nama fungsi yang bijak, tetapi yang lebih penting, ia mewujudkan korespondensi satu-dengan-satu antara id teks dan elemen DOM pada peringkat konsep. Sebelum ada $, jarak antara id dan elemen yang sepadan secara amnya, elemen perlu dicache dalam pembolehubah, seperti
prototype.js kemudiannya mengembangkan makna $,
Ini sepadan dengan formula:
[e,e] = $(id,id)
Malangnya, prototype.js tersasar dalam langkah ini, dan pendekatan ini mempunyai sedikit nilai praktikal.
Ia adalah jQuery yang benar-benar mempromosikan $, dan $nya sepadan dengan formula
[o] = $(pemilih)
Berikut ialah tiga peningkatan:
A. Pemilih bukan lagi pengesan nod tunggal, tetapi pemilih koleksi yang kompleks
B. Elemen yang dikembalikan bukanlah nod DOM asal, tetapi objek dengan gelagat kaya yang dipertingkatkan lagi oleh jQuery, yang boleh memulakan rantai panggilan fungsi yang kompleks.
C. Objek pembungkusan yang dikembalikan oleh $ dibentuk menjadi bentuk tatasusunan, yang secara semula jadi menyepadukan operasi pengumpulan ke dalam rantaian panggilan.
Sudah tentu, perkara di atas hanyalah penerangan yang terlalu ringkas tentang $ ajaib, dan fungsi sebenar adalah lebih rumit, khususnya, terdapat fungsi pembinaan langsung yang sangat biasa digunakan
$(fungsi{}) Fungsi ini benar-benar tidak bersuara Ini bermakna fungsi panggil balik ini dipanggil apabila document.ready. Sungguh, $ adalah fungsi ajaib Jika anda mempunyai sebarang soalan, sila tanya.
Ringkasnya, $ ialah saluran peralihan daripada DOM biasa dan dunia penerangan teks kepada dunia jQuery dengan gelagat objek kaya. Selepas melintasi pintu ini, kami tiba di Utopia.
4. Parameter amorf: fokus pada ekspresi dan bukannya kekangan
A. Ikat satu acara pada satu masa
Bagaimana fungsi itu boleh menjadi sangat berlebihan, bagaimana ia boleh bertindak secara berbeza bergantung pada jenis dan bilangan parameter yang dilalui? . Walaupun ada banyak bentuk Perubahan, tetapi tidak ada kata-kata yang tidak masuk akal
5. Operasi rantai: penghalusan berperingkat linearisasi
Titik jualan utama jQuery pada zaman awal ialah operasi rantaian yang dipanggil
Dalam bahasa imperatif umum, kami sentiasa perlu menapis data dalam gelung bersarang, dan kod untuk benar-benar mengendalikan data terikat dengan kod untuk mencari data Walau bagaimanapun, jQuery menggunakan kaedah membina koleksi dahulu dan kemudian memohon berfungsi kepada koleksi. Kaedah ini mencapai penyahgandingan dua logik dan linearisasi struktur bersarang Malah, kita boleh memahami koleksi secara intuitif tanpa menggunakan pemikiran prosedur, seperti $('div.my input:checked') Boleh dilihat sebagai penerangan langsung dan bukannya penjejakan kelakuan proses.
Gelung bermaksud pemikiran kita berada dalam keadaan gulung semula berulang, dan selepas linearisasi, ia berjalan terus ke satu arah, yang sangat mengurangkan beban pemikiran dan meningkatkan kebolehkomposisian kod untuk mengurangkan gangguan panggilan chain , jQuery mencipta idea yang menarik: jQuery membungkus objek itu sendiri seperti tatasusunan (koleksi boleh dipetakan ke koleksi baharu, dan koleksi boleh dihadkan kepada subkoleksi mereka sendiri Pemula panggilan itu ialah koleksi). Hasilnya juga merupakan koleksi. Beberapa perubahan struktur telah berlaku, tetapi ia masih merupakan satu set adalah titik tetap konseptual. Ini adalah idea reka bentuk yang diserap daripada bahasa berfungsi. Operasi pengumpulan adalah operasi yang terlalu biasa Di Java, kita boleh dengan mudah mendapati bahawa sebilangan besar fungsi enkapsulasi sebenarnya merangkumi beberapa operasi traversal koleksi Dalam jQuery, operasi pengumpulan terlalu mudah dan tidak perlu dikapsulkan.
Panggilan berangkai bermakna kami sentiasa mempunyai objek "semasa", dan semua operasi dilakukan pada objek semasa ini. Ini sepadan dengan formula berikut
x = dx
Setiap langkah dalam rantai panggilan ialah penerangan tambahan bagi objek semasa dan proses penghalusan langkah demi langkah ke arah matlamat akhir. Idea ini juga digunakan secara meluas dalam platform Witrix. Terutama untuk merealisasikan penyepaduan mekanisme platform dan kod perniagaan, platform akan menyediakan kandungan lalai objek (bekas), dan kod perniagaan boleh diperhalusi dan disemak secara beransur-ansur atas dasar ini, termasuk membatalkan tetapan lalai.
Bercakap mengenainya, walaupun panggilan berantai jQuery sangat mudah di permukaan, anda perlu menulis lapisan tambahan gelung apabila melaksanakannya secara dalaman, kerana pengkompil tidak tahu tentang "menggunakan secara automatik pada setiap elemen dalam koleksi".
Sebagai perpustakaan js, masalah besar yang mesti diselesaikannya ialah perkaitan keadaan dan pengurusan kolaboratif antara objek js dan nod DOM. Sesetengah perpustakaan js memilih untuk memfokus pada objek js dan menyimpan penunjuk nod DOM dalam pembolehubah ahli objek js Apabila mengakses, mereka sentiasa menggunakan objek js sebagai titik masuk dan secara tidak langsung mengendalikan objek DOM melalui fungsi js. Di bawah pengkapsulan jenis ini, nod DOM sebenarnya hanyalah "himpunan" peringkat rendah yang dipaparkan sebagai antara muka. Pilihan jQuery adalah serupa dengan platform Witrix, yang berdasarkan struktur HTML itu sendiri Ia meningkatkan fungsi nod DOM melalui js dan mempromosikannya kepada objek lanjutan dengan tingkah laku yang kompleks. Idea di sini ialah reka bentuk yang tidak mengganggu dan kemerosotan yang anggun. Struktur semantik lengkap pada peringkat HTML asas Peranan js adalah untuk meningkatkan tingkah laku interaktif dan mengawal borang persembahan.
Jika kita mengakses objek pembungkusan yang sepadan melalui $('#my') setiap kali, di manakah beberapa pembolehubah keadaan yang perlu dikekalkan untuk masa yang lama disimpan? jQuery menyediakan mekanisme pengurusan data global yang bersatu.
Dapatkan data:
Set data dalam HTML boleh dibaca melalui $('#my').data('myAttr').
Apabila mengakses data buat kali pertama, jQuery akan menetapkan uuid unik pada nod DOM, dan kemudian menetapkannya pada atribut expando khusus bagi nod DOM memastikan uuid ini tidak berulang dalam halaman ini.
Oleh kerana semua data diurus secara seragam melalui mekanisme data, terutamanya semua fungsi mendengar acara (data.events), jQuery boleh melaksanakan pengurusan sumber dengan selamat. Apabila mengklon nod, fungsi mendengar acara yang berkaitan boleh diklon secara automatik. Apabila kandungan nod DOM diganti atau nod DOM dimusnahkan, jQuery juga boleh membatalkan fungsi mendengar acara secara automatik dan mengeluarkan data js yang berkaitan dengan selamat.
7 acara: model acara bersatu
Gambar "peristiwa yang merambat di sepanjang pokok objek" adalah intipati model pengaturcaraan antara muka berorientasikan objek. Komposisi objek membentuk perihalan struktur antara muka yang stabil Peristiwa berterusan berlaku pada nod tertentu pokok objek dan merambat ke atas melalui mekanisme menggelegak. Pokok objek secara semula jadi menjadi struktur kawalan Kita boleh mendengar peristiwa pada semua nod anak pada nod induk tanpa mewujudkan perkaitan dengan setiap nod anak.
Selain mewujudkan abstraksi bersatu untuk model acara penyemak imbas yang berbeza, jQuery terutamanya telah membuat peningkatan berikut:
A. Menambah mekanisme peristiwa tersuai (tersuai) Mekanisme penyebaran peristiwa tidak ada kaitan dengan kandungan acara itu sendiri pada dasarnya, jadi acara tersuai boleh melalui laluan pemprosesan yang sama dan menggunakan kaedah pemantauan yang sama seperti peristiwa terbina dalam penyemak imbas. . Gunakan Peristiwa tersuai boleh meningkatkan kohesi kod dan mengurangkan gandingan kod Contohnya, jika tiada acara tersuai, kod yang berkaitan selalunya perlu mengendalikan objek berkaitan
Jika nod li lain dibuat selepas memanggil bind, peristiwa klik nod ini tidak akan dipantau.
Mekanisme perwakilan jQuery boleh mendaftarkan fungsi mendengar kepada nod induk, dan peristiwa yang dicetuskan pada nod anak akan dihantar secara automatik kepada pengendali Fn yang sepadan mengikut pemilih Dengan cara ini, jika anda mendaftar sekarang, anda boleh mendengarnya nod yang dicipta pada masa hadapan
Mengetepikan pelaksanaan jQuery, pertimbangkan dahulu apa yang perlu kita lakukan jika kita ingin mencapai kesan animasi pada antara muka Sebagai contoh, kita ingin meningkatkan lebar div daripada 100px kepada 200px dalam masa 1 saat mudah untuk membayangkan bahawa dalam satu tempoh masa kita perlu melaraskan lebar div dari semasa ke semasa, [dan pada masa yang sama] kita juga perlu melaksanakan kod lain Tidak seperti panggilan fungsi biasa, selepas mengeluarkan arahan animasi, kita tidak boleh mengharapkan untuk mendapatkan apa yang kita mahu serta-merta Hasilnya, dan kita tidak boleh hanya menunggu keputusan tiba Kerumitan animasi terletak pada ia mesti dilaksanakan dalam tempoh masa selepas ungkapan sekali sahaja, dan terdapat. berbilang laluan pelaksanaan logik yang perlu dibuka pada masa yang sama
Sir Isaac Newton yang hebat menulis dalam "Prinsip Matematik Falsafah Semula Jadi": "Masa mutlak, benar dan matematik itu sendiri berlalu". A1 ke A5 dan langkah B1 ke B5 pada masa yang sama, kita hanya perlu melaksanakan [A1, B1] pada masa t1, [A2, B2] pada masa t2, dan seterusnya t1 |. t2 |. t4 | A1 |. A2 |. A4 | B1 |. B3 |Borang pelaksanaan khusus boleh menjadi
A. Bagi setiap animasi, bahagikannya kepada objek Animasi, yang dibahagikan kepada beberapa langkah secara dalaman.
animasi = Animasi baharu(div,"lebar",100,200,1000,
Fungsi interpolasi yang bertanggungjawab untuk segmentasi langkah, fungsi panggil balik apabila animasi selesai);
B. Daftarkan objek animasi dalam pengurus global
C. Pada setiap detik pencetus jam global, majukan setiap urutan pelaksanaan yang didaftarkan selangkah lebih jauh, dan jika ia telah tamat, padamkannya daripada pengurus global.
Salin kod
Jawapan jQuery kepada soalan-soalan ini boleh dikatakan memerah nilai terakhir ungkapan tatabahasa js
Salin kod
A. Gunakan mekanisme pemilih terbina dalam jQuery untuk menyatakan pemprosesan koleksi secara semulajadi.
B. Gunakan Peta untuk menyatakan berbilang perubahan atribut
C. Gunakan mikroformat untuk menyatakan konsep delta khusus domain ' =200px' bermakna menambah 200px pada nilai sedia ada
D. Gunakan susunan panggilan fungsi untuk mentakrifkan susunan pelaksanaan animasi secara automatik: animasi yang dilampirkan pada baris gilir pelaksanaan secara semula jadi akan menunggu sehingga animasi sebelumnya dilaksanakan sepenuhnya sebelum bermula.
Butiran pelaksanaan baris gilir animasi jQuery adalah kira-kira seperti berikut,
A. Fungsi animasi sebenarnya memanggil giliran(fungsi(){dequeue perlu dipanggil pada akhir pelaksanaan, jika tidak kaedah seterusnya tidak akan didorong})
Apabila fungsi baris gilir dilaksanakan, jika ia adalah baris gilir fx dan tiada animasi sedang berjalan (jika animasi dipanggil dua kali berturut-turut, fungsi pelaksanaan kedua akan menunggu dalam baris gilir), operasi dequeue akan dicetuskan secara automatik untuk memacu beratur untuk berlari.
Jika ia adalah baris gilir fx, rentetan "sedang berjalan" akan ditambahkan secara automatik ke bahagian atas baris gilir apabila nyah gilir, menunjukkan bahawa animasi akan dilaksanakan
B. Untuk setiap harta, cipta objek jQuery.fx. Kemudian panggil fungsi fx.custom (bersamaan dengan permulaan) untuk memulakan animasi.
C. Dalam fungsi tersuai, daftarkan fungsi fx.step ke timerFuncs global, dan kemudian cuba mulakan pemasa global.
timerId = setInterval( fx.tick, fx.interval );
D. Fungsi tanda statik akan memanggil fungsi langkah setiap fx dalam urutan. Dalam fungsi langkah, nilai semasa atribut dikira melalui pelonggaran, dan kemudian kemas kini fx dipanggil untuk mengemas kini atribut.
E. Fungsi langkah fx menentukan bahawa jika semua perubahan atribut telah selesai, dequeue dipanggil untuk memacu kaedah seterusnya.
Apa yang sangat menarik ialah terdapat banyak kod pencetus geganti dalam kod pelaksanaan jQuery: jika anda perlu melaksanakan animasi seterusnya, keluarkannya dan laksanakannya, jika anda perlu memulakan pemasa, mulakan pemasa, dan lain-lain. Ini kerana program js berbenang tunggal Terdapat hanya satu laluan pelaksanaan yang sebenar Untuk memastikan bahawa utas pelaksanaan tidak terganggu, fungsi perlu membantu antara satu sama lain enjin di dalam program, atau bahkan enjin pelaksanaan yang tidak terhingga, maka penampilan program akan berubah pada dasarnya
9. Corak janji: pengenalpastian hubungan sebab akibat
Pola janji dan masa depan pada asasnya adalah perkara yang sama Mari kita lihat corak masa depan yang biasa di Jawa.
Mod masa hadapan secara amnya bermaksud objek luaran secara aktif menyemak nilai pulangan masa hadapan, manakala mod janji bermakna objek luaran mendaftarkan fungsi panggil balik pada janji
jQuery memperkenalkan struktur Tertunda, membina semula ajax, baris gilir, document.ready, dsb. mengikut mod janji, dan menyatukan mekanisme pelaksanaan tak segerak kemudian(onDone, onFail) akan menambah fungsi panggil balik pada janji panggilan berjaya diselesaikan ( menyelesaikan), fungsi panggil balik onDone akan dilaksanakan, dan jika panggilan gagal (tolak), maka onFail akan dilaksanakan apabila boleh menunggu pada beberapa objek janji telah bermula atau pun tamat, Anda masih boleh mendaftarkan fungsi panggil balik
someObj.done(callback).sendRequest() vs. someObj.sendRequest().done(callback)
Mendaftarkan fungsi panggil balik sebelum mengeluarkan panggilan tak segerak atau mendaftar selepas mengeluarkan panggilan tak segerak adalah setara sepenuhnya Ini mendedahkan bahawa ungkapan program tidak pernah benar-benar tepat dan sentiasa ada dimensi perubahan yang wujud jika dimensi yang wujud ini boleh menjadi berkesan digunakan Kebolehubahan boleh meningkatkan prestasi program serentak.
Pelaksanaan khusus mod janji adalah sangat mudah._Deferred mentakrifkan baris gilir fungsi, yang mempunyai fungsi berikut:
.A. Simpan fungsi panggil balik.
B. Laksanakan semua fungsi yang disimpan pada masa menyelesaikan atau menolak.
C. Selepas ia dilaksanakan, sebarang fungsi tambahan akan dilaksanakan serta-merta.
Sesetengah bahasa yang berorientasikan khusus kepada pengkomputeran teragih atau pengkomputeran selari akan mempunyai mod janji terbina dalam pada tahap bahasa, seperti bahasa E
Dulu ada konsep yang dipanggil "warisan berbilang", yang merupakan versi Super Saiyan bagi konsep pewarisan Malangnya, ia kemudiannya didiagnosis sebagai mengalami kecacatan kongenital, sehingga tafsiran konsep pewarisan muncul: pewarisan ialah hubungan " ialah satu", objek terbitan "ialah a" mempunyai banyak kelas asas, yang pasti akan membawa kepada skizofrenia, jadi warisan berbilang adalah buruk
Jika kelas D mewarisi daripada dua kelas asas A dan B, dan kedua-dua kelas A dan B melaksanakan fungsi yang sama f, maka f dalam kelas D ialah f dalam A atau f dalam B, atau adakah ia Bagaimana pula dengan f dalam A dan f dalam B? Kemunculan dilema ini sebenarnya berpunca daripada fakta bahawa kelas asas A dan B dalam hubungan selari Mereka memenuhi undang-undang komutatif dan undang-undang bersekutu. mungkin sukar bagi kita untuk mengenali dua perhubungan Subordinasi akan muncul di antara mana-mana konsep Tetapi jika kita melonggarkan beberapa keperluan tahap konsep dan mempertimbangkan isu penggunaan semula kod lebih daripada peringkat operasi, kita hanya boleh berfikir bahawa B beroperasi berdasarkan A, maka. kita boleh mendapatkan linear Hasil transformasi Dalam erti kata lain, melepaskan undang-undang komutatif antara A dan B dan hanya mengekalkan undang-undang bersekutu, melanjutkan A, B dan melanjutkan B, A akan mempunyai dua keputusan yang berbeza, dan tidak akan ada lagi. menjadi sebarang kekaburan dalam tafsiran Mekanisme sifat yang dipanggil dalam bahasa sebenarnya mengamalkan strategi ini
Lama selepas penciptaan teknologi berorientasikan objek, apa yang dipanggil pengaturcaraan berorientasikan aspek (AOP) muncul ia berbeza daripada OOP kerana ia adalah teknologi penentududukan dan pengubahsuaian dalam ruang struktur kod dan kaedah, dan tidak tahu maksudnya AOP juga menyediakan kaedah penggunaan semula kod yang serupa dengan pewarisan berbilang, iaitu objek dianggap sebagai Peta yang boleh dibuka dan diubah suai dengan sewenang-wenangnya disuntik terus ke dalam badan objek dan terus berubah kelakuannya Pustaka prototype.js memperkenalkan fungsi lanjutan,
Jika kod itu bagus, perlu ada kurang pertimbangan gelung dan pernyataan penghakiman adalah komponen asas program, tetapi ia selalunya tidak ditemui dalam perpustakaan kod yang sangat baik, kerana jalinan pernyataan ini akan mengaburkan baris utama. logik sistem. Biarkan fikiran kita tersesat dalam pengesanan kod yang meletihkan itu sendiri telah mengurangkan keperluan untuk penyataan gelung melalui fungsi seperti masing-masing dan untuk penyataan penghakiman, ia diproses terutamanya melalui jadual pemetaan. Fungsi val( ) jQuery perlu melakukan pemprosesan yang berbeza untuk teg yang berbeza, jadi tentukan jadual pemetaan fungsi dengan tagName sebagai kunci
Apa yang dipanggil pemalam jQuery sebenarnya adalah fungsi yang ditambahkan pada $.fn Jadi apakah fn ini?
Jelas sekali, $.fn sebenarnya adalah singkatan kepada jQuery.prototype
Pemalam tanpa kewarganegaraan hanyalah fungsi, sangat mudah
13. sniffer pelayar lwn. pengesanan ciri
Penghidu penyemak imbas pernah menjadi teknologi yang sangat popular, seperti dalam jQuery awal
Dalam kod khusus, pemprosesan berbeza boleh dilakukan untuk penyemak imbas yang berbeza
Walau bagaimanapun, apabila persaingan dalam pasaran penyemak imbas semakin meningkat, pesaing meniru dan menyamar antara satu sama lain, mengakibatkan kekacauan userAgent Digabungkan dengan kelahiran Chrome dan kebangkitan Safari, IE juga telah mula mempercepatkan langkahnya ke arah standard, dan sniffers. tidak lagi boleh melakukannya. Sebagai kaedah pengesanan yang lebih halus dan khusus, pengesanan ciri secara beransur-ansur menjadi cara utama untuk menangani keserasian penyemak imbas
14. Prototaip lwn. jQuery
prototype.js ialah perpustakaan dengan aspirasi tinggi Matlamatnya adalah untuk memberikan pengalaman pengguna baharu, mengubah JavaScript daripada peringkat bahasa dengan merujuk kepada Ruby, dan akhirnya mengubah wajah js. $. Sebaliknya, jQuery lebih pragmatik dan matlamatnya hanya untuk menulis lebih sedikit dan melakukan lebih banyak lagiNamun, nasib yang menunggu idealis radikal sering mati sebelum cita-cita mereka dipenuhi Apabila fungsi pengikat ikonik prototaip.js telah diserap ke dalam piawaian ECMAScript, penurunannya telah ditakdirkan objek ialah kemahiran rahsia unik prototype.js, dan ia juga merupakan tumit Achillesnya Terutama apabila ia cuba meniru jQuery dan mengembalikan objek yang dipertingkatkan melalui Element.extend(element), ia dibuang sepenuhnya oleh Prototaip. js berbeza daripada jQuery Ia sentiasa mengubah suai prototaip objek asli Walau bagaimanapun, pelayar adalah medan yang penuh dengan pepijat, pembohongan, bagasi sejarah dan konspirasi komersial. Isu prestasi, konflik nama, isu keserasian, dsb. tidak dapat diselesaikan dengan keupayaan pustaka bantuan Versi 2.0 Prototype.js dikatakan sedang mengalami perubahan besar. Saya tidak tahu sama ada hendak berputus asa keserasian, atau teruskan Berjuang untuk bertahan dalam celah-celah.
Saya harap artikel ini akan membantu pengaturcaraan jQuery semua orang.