


Penjelasan terperinci tentang suntikan pergantungan dalam kemahiran JavaScript_javascript
Dunia pengaturcaraan komputer sebenarnya adalah proses mengabstraksi bahagian mudah secara berterusan dan menyusun abstraksi ini. JavaScript tidak terkecuali Apabila kita menggunakan JavaScript untuk menulis aplikasi, adakah kita semua menggunakan kod yang ditulis oleh orang lain, seperti beberapa perpustakaan atau rangka kerja sumber terbuka yang terkenal. Apabila projek kami berkembang, semakin banyak modul yang perlu kami andalkan menjadi semakin penting Pada masa ini, cara mengatur modul ini dengan berkesan telah menjadi isu yang sangat penting. Suntikan kebergantungan menyelesaikan masalah tentang cara mengatur modul bergantung kod dengan berkesan. Anda mungkin pernah mendengar istilah "suntikan kebergantungan" dalam beberapa rangka kerja atau perpustakaan, seperti rangka kerja hadapan yang terkenal AngularJS Suntikan Ketergantungan ialah salah satu ciri yang sangat penting. Walau bagaimanapun, suntikan ketergantungan bukanlah perkara baru sama sekali Ia telah wujud dalam bahasa pengaturcaraan lain seperti PHP untuk masa yang lama. Pada masa yang sama, suntikan pergantungan tidaklah sesulit yang dibayangkan. Dalam artikel ini, kita akan mempelajari konsep suntikan pergantungan dalam JavaScript dan menerangkan dengan cara yang mudah dan mudah cara menulis kod "gaya suntikan pergantungan".
Penetapan Matlamat
Andaikan kita kini mempunyai dua modul. Modul pertama digunakan untuk menghantar permintaan Ajax, manakala modul kedua digunakan sebagai penghala.
var service = function() {
Kembalikan { nama: 'Perkhidmatan' };
}
var penghala = function() {
Kembalikan { nama: 'Penghala' };
}
Pada masa ini, kami menulis fungsi yang memerlukan penggunaan dua modul yang disebutkan di atas:
var doSomething = function(other) {
var s = perkhidmatan();
var r = penghala();
};
Di sini, untuk menjadikan kod kami lebih menarik, parameter ini perlu menerima beberapa lagi parameter. Sudah tentu, kita boleh menggunakan sepenuhnya kod di atas, tetapi kod di atas sedikit kurang fleksibel dari sebarang aspek. Bagaimana jika nama modul yang kita perlukan untuk menggunakan perubahan kepada ServiceXML atau ServiceJSON? Atau bagaimana jika kita ingin menggunakan beberapa modul palsu untuk tujuan ujian. Pada ketika ini, kita tidak boleh hanya mengedit fungsi itu sendiri. Jadi perkara pertama yang perlu kita lakukan ialah lulus modul bergantung sebagai parameter kepada fungsi, kodnya adalah seperti berikut:
var doSomething = fungsi(perkhidmatan, penghala, lain-lain) {
var s = perkhidmatan();
var r = penghala();
};
Dalam kod di atas, kami lulus tepat modul yang kami perlukan. Tetapi ini membawa masalah baru. Katakan kita memanggil kaedah doSomething dalam kedua-dua bahagian kod. Pada ketika ini, bagaimana jika kita memerlukan pergantungan ketiga. Pada masa ini, bukan idea yang bijak untuk mengedit semua kod panggilan fungsi. Oleh itu, kami memerlukan sekeping kod untuk membantu kami melakukan ini. Inilah masalah yang cuba diselesaikan oleh penyuntik kebergantungan. Kini kami boleh menetapkan matlamat kami:
1. Kita sepatutnya boleh mendaftar tanggungan
2. Penyuntik kebergantungan harus menerima fungsi dan kemudian mengembalikan fungsi yang boleh mendapatkan sumber yang diperlukan
3. Kod tidak boleh rumit, tetapi harus ringkas dan mesra
4. Penyuntik kebergantungan harus mengekalkan skop fungsi yang diluluskan
5. Fungsi yang diluluskan seharusnya boleh menerima parameter tersuai, bukan hanya kebergantungan yang diterangkan
memerlukan kaedah/kaedah AMD
Mungkin anda pernah mendengar tentang requirejs yang terkenal, iaitu perpustakaan yang boleh menyelesaikan masalah suntikan pergantungan dengan baik:
define(['service', 'router'], function(service, router) {
// ...
});
Idea requirejs ialah pertama kita harus menerangkan modul yang diperlukan, dan kemudian menulis fungsi anda sendiri. Antaranya, susunan parameter adalah penting. Katakan kita perlu menulis modul yang dipanggil penyuntik yang boleh melaksanakan sintaks yang serupa.
var doSomething = injector.resolve(['service', 'router'], function(service, router, other) {
Jangkakan(perkhidmatan().nama).menjadi('Perkhidmatan');
Jangkakan(penghala().nama).menjadi('Penghala');
Jangkakan(lain).untuk.jadi('Lain-lain');
});
doSomething("Lain");
Sebelum meneruskan, satu perkara yang perlu dijelaskan ialah dalam badan fungsi doSomething, kami menggunakan perpustakaan penegasan expect.js untuk memastikan ketepatan kod. Terdapat sesuatu yang serupa dengan idea TDD (Test Driven Development) di sini.
Kini kami secara rasmi mula menulis modul penyuntik kami. Mula-mula ia mestilah monolit supaya ia mempunyai fungsi yang sama dalam setiap bahagian aplikasi kami.
penyuntik var = {
tanggungan: {},
Daftar: fungsi(kunci, nilai) {
This.dependencies[key] = value;
},
Selesaikan: fungsi(deps, func, skop) {
}
}
Objek ini sangat mudah, mengandungi hanya dua fungsi dan pembolehubah untuk tujuan penyimpanan. Apa yang perlu kita lakukan ialah menyemak tatasusunan deps dan kemudian mencari jawapan dalam pembolehubah kebergantungan. Bahagian selebihnya ialah menggunakan kaedah .apply untuk memanggil pembolehubah func yang kami lalui:
menyelesaikan: fungsi(deps, func, skop) {
var args = [];
untuk(var i=0; i
args.push(this.dependencies[d]);
} lain {
buang Ralat baharu('Tidak dapat diselesaikan ' d);
}
}
Kembalikan fungsi() {
func.apply(skop || {}, args.concat(Array.prototype.slice.call(arguments, 0)));
}
Dalam kod di atas, fungsi Array.prototype.slice.call(arguments, 0) adalah untuk menukar pembolehubah argumen kepada tatasusunan sebenar. Setakat ini, kod kami lulus ujian dengan sempurna. Tetapi masalahnya di sini ialah kita mesti menulis modul yang diperlukan dua kali, dan kita tidak boleh menyusunnya dalam sebarang susunan. Parameter tambahan sentiasa datang selepas semua kebergantungan.
Kaedah refleksi
Menurut penjelasan dalam Wikipedia, refleksi bermaksud objek boleh mengubah suai struktur dan tingkah lakunya sendiri semasa program sedang berjalan. Dalam JavaScript, secara ringkasnya, ia adalah keupayaan untuk membaca kod sumber objek dan menganalisis kod sumber. Masih kembali kepada kaedah doSomething kami, jika anda memanggil kaedah doSomething.toString(), anda boleh mendapatkan rentetan berikut:
var s = perkhidmatan();
var r = penghala();
}"
Kami boleh mengubah suai kaedah penyelesaian kepada kod yang ditunjukkan di bawah:
selesaikan: function() {
var func, deps, skop, args = [], self = this;
func = hujah[0];
deps = func.toString().match(/^functions*[^(]*(s*([^)]*))/m)[1].replace(/ /g, '').split(' ,');
skop = argumen[1] || {};
Kembalikan fungsi() {
var a = Array.prototype.slice.call(argumen, 0);
untuk(var i=0; i
args.push(self.dependencies[d] && d != '' ? self.dependencies[d] : a.shift());
}
func.apply(skop || {}, args);
}
...
args.push(self.dependencies[d] && d != '' ? self.dependencies[d] : a.shift());
Jangkakan(perkhidmatan().nama).menjadi('Perkhidmatan');
Jangkakan(penghala().nama).menjadi('Penghala');
Jangkakan(lain).untuk.jadi('Lain-lain');
});
doSomething("Lain");
Tetapi, tiada yang sempurna. Terdapat masalah yang sangat serius dengan suntikan pergantungan kaedah reflektif. Apabila kod dipermudahkan, ralat berlaku. Ini kerana semasa proses pemudahan kod, nama parameter berubah, yang akan menyebabkan kebergantungan gagal diselesaikan. Contohnya:
}]);
penyuntik var = {
tanggungan: {},
daftar: fungsi(kunci, nilai) {
this.dependencies[key] = value;
},
selesaikan: function() {
var func, deps, skop, args = [], self = this;
if(jenis argumen[0] === 'rentetan') {
func = hujah[1];
deps = argumen[0].replace(/ /g, '').split(',');
skop = hujah[2] || {};
} lain {
func = hujah[0];
deps = func.toString().match(/^functions*[^(]*(s*([^)]*))/m)[1].replace(/ /g, '').split(' ,');
skop = hujah[1] || {};
}
kembalikan fungsi() {
var a = Array.prototype.slice.call(arguments, 0);
untuk(var i=0; i
args.push(self.dependencies[d] && d != '' ? self.dependencies[d] : a.shift());
}
func.apply(skop || {}, args);
}
}
}
这一个版本的resolve方法可以接受两个或者三个参数。下面是一段测试代码>:
jangkakan(a().nama).to.be('Router');
expect(b).to.be('Other');
jangkakan(c().nama).to.be('Perkhidmatan');
});
doSomething("Lain");
结语
在上面的内容中,我们介绍了几种JavaScript中依赖注入的方法,希望本文能够帮助佩作中依赖注入的方法,希望本文能够帮助佩佨丮助你这个技巧,并且写出依赖注入风格的代码。
Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian Pengenalan: Dengan perkembangan teknologi yang berterusan, teknologi pengecaman pertuturan telah menjadi bahagian penting dalam bidang kecerdasan buatan. Sistem pengecaman pertuturan dalam talian berdasarkan WebSocket dan JavaScript mempunyai ciri kependaman rendah, masa nyata dan platform merentas, dan telah menjadi penyelesaian yang digunakan secara meluas. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian.

WebSocket dan JavaScript: Teknologi utama untuk merealisasikan sistem pemantauan masa nyata Pengenalan: Dengan perkembangan pesat teknologi Internet, sistem pemantauan masa nyata telah digunakan secara meluas dalam pelbagai bidang. Salah satu teknologi utama untuk mencapai pemantauan masa nyata ialah gabungan WebSocket dan JavaScript. Artikel ini akan memperkenalkan aplikasi WebSocket dan JavaScript dalam sistem pemantauan masa nyata, memberikan contoh kod dan menerangkan prinsip pelaksanaannya secara terperinci. 1. Teknologi WebSocket

Pengenalan kepada cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata: Dengan populariti Internet dan kemajuan teknologi, semakin banyak restoran telah mula menyediakan perkhidmatan pesanan dalam talian. Untuk melaksanakan sistem pesanan dalam talian masa nyata, kami boleh menggunakan teknologi JavaScript dan WebSocket. WebSocket ialah protokol komunikasi dupleks penuh berdasarkan protokol TCP, yang boleh merealisasikan komunikasi dua hala masa nyata antara pelanggan dan pelayan. Dalam sistem pesanan dalam talian masa nyata, apabila pengguna memilih hidangan dan membuat pesanan

Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem tempahan dalam talian Dalam era digital hari ini, semakin banyak perniagaan dan perkhidmatan perlu menyediakan fungsi tempahan dalam talian. Adalah penting untuk melaksanakan sistem tempahan dalam talian yang cekap dan masa nyata. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem tempahan dalam talian dan memberikan contoh kod khusus. 1. Apakah itu WebSocket? WebSocket ialah kaedah dupleks penuh pada sambungan TCP tunggal.

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Pengenalan: Hari ini, ketepatan ramalan cuaca sangat penting kepada kehidupan harian dan membuat keputusan. Apabila teknologi berkembang, kami boleh menyediakan ramalan cuaca yang lebih tepat dan boleh dipercayai dengan mendapatkan data cuaca dalam masa nyata. Dalam artikel ini, kita akan mempelajari cara menggunakan teknologi JavaScript dan WebSocket untuk membina sistem ramalan cuaca masa nyata yang cekap. Artikel ini akan menunjukkan proses pelaksanaan melalui contoh kod tertentu. Kami

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

Dalam Go, mod suntikan kebergantungan (DI) dilaksanakan melalui hantaran parameter fungsi, termasuk hantaran nilai dan hantaran penunjuk. Dalam corak DI, kebergantungan biasanya diluluskan sebagai petunjuk untuk meningkatkan penyahgandingan, mengurangkan pertikaian kunci dan menyokong kebolehujian. Dengan menggunakan penunjuk, fungsi itu dipisahkan daripada pelaksanaan konkrit kerana ia hanya bergantung pada jenis antara muka. Hantaran penunjuk juga mengurangkan overhed menghantar objek besar, dengan itu mengurangkan pertengkaran kunci. Tambahan pula, corak DI memudahkan untuk menulis ujian unit untuk fungsi menggunakan corak DI kerana kebergantungan boleh dipermainkan dengan mudah.

JavaScript ialah bahasa pengaturcaraan yang digunakan secara meluas dalam pembangunan web, manakala WebSocket ialah protokol rangkaian yang digunakan untuk komunikasi masa nyata. Menggabungkan fungsi berkuasa kedua-duanya, kami boleh mencipta sistem pemprosesan imej masa nyata yang cekap. Artikel ini akan memperkenalkan cara untuk melaksanakan sistem ini menggunakan JavaScript dan WebSocket, dan memberikan contoh kod khusus. Pertama, kita perlu menjelaskan keperluan dan matlamat sistem pemprosesan imej masa nyata. Katakan kita mempunyai peranti kamera yang boleh mengumpul data imej masa nyata
