Saya pikir saya akan memperluas jawaban di atas dengan berbicara tentang bagaimana Anda akan menyesuaikan modul menjadi sebuah aplikasi. Saya pernah membaca tentang ini di buku doug crockford tetapi karena baru mengenal javascript, semuanya masih agak misterius.
Saya berasal dari latar belakang ac # jadi telah menambahkan beberapa terminologi yang menurut saya berguna dari sana.
Html
Anda akan memiliki semacam file html tingkat atas. Ini membantu untuk menganggap ini sebagai file proyek Anda. Setiap file javascript yang Anda tambahkan ke proyek ingin masuk ke ini, sayangnya Anda tidak mendapatkan dukungan alat untuk ini (saya menggunakan IDEA).
Anda perlu menambahkan file ke proyek dengan tag skrip seperti ini:
<script type="text/javascript" src="app/native/MasterFile.js" /></script>
<script type="text/javascript" src="app/native/SomeComponent.js" /></script>
Tampaknya menciutkan tag menyebabkan hal-hal gagal - sementara itu terlihat seperti xml itu benar-benar sesuatu dengan aturan yang lebih gila!
File namespace
MasterFile.js
myAppNamespace = {};
itu dia. Ini hanya untuk menambahkan satu variabel global untuk kode kita yang tersisa. Anda juga bisa mendeklarasikan namespace bertingkat di sini (atau di file mereka sendiri).
Modul
SomeComponent.js
myAppNamespace.messageCounter= (function(){
var privateState = 0;
var incrementCount = function () {
privateState += 1;
};
return function (message) {
incrementCount();
}
})();
Apa yang kita lakukan di sini adalah menetapkan fungsi penghitung pesan ke variabel dalam aplikasi kita. Ini adalah fungsi yang mengembalikan fungsi yang segera kita jalankan .
Konsep
Saya pikir itu membantu untuk memikirkan baris teratas di SomeComponent sebagai namespace tempat Anda mendeklarasikan sesuatu. Satu-satunya peringatan untuk ini adalah semua namespace Anda harus muncul di beberapa file lain terlebih dahulu - mereka hanyalah objek yang di-root oleh variabel aplikasi kita.
Saya hanya mengambil langkah kecil dengan ini saat ini (saya merefaktor beberapa javascript normal dari aplikasi extjs sehingga saya dapat mengujinya) tetapi tampaknya cukup bagus karena Anda dapat menentukan unit fungsional kecil sambil menghindari rawa 'ini ' .
Anda juga bisa menggunakan gaya ini untuk mendefinisikan konstruktor dengan mengembalikan fungsi yang mengembalikan objek dengan sekumpulan fungsi dan tidak langsung memanggilnya.