Modülleri bir uygulamaya nasıl sığdıracağınızdan bahsederek yukarıdaki cevabı genişleteceğimi düşündüm. Doug crockford kitapta bunu okurdum ama javascript için yeni olmak hala biraz gizemli oldu.
Ben ac # arka plan geliyor o yüzden yararlı buluyorum bazı terminoloji ekledik.
Html
Bazı üst düzey html dosyanız olacak. Bunu proje dosyanız olarak düşünmenize yardımcı olur. Projeye eklediğiniz her javascript dosyası buna girmek istiyor, maalesef bunun için araç desteği almıyorsunuz (IDEA kullanıyorum).
Bu gibi komut dosyası etiketleri ile projeye dosya eklemeniz gerekir:
<script type="text/javascript" src="app/native/MasterFile.js" /></script>
<script type="text/javascript" src="app/native/SomeComponent.js" /></script>
Etiketleri daraltmak işlerin başarısız olmasına neden olur - xml gibi görünüyorken gerçekten daha çılgın kurallara sahip bir şey!
Ad alanı dosyası
MasterFile.js
myAppNamespace = {};
bu kadar. Bu, yalnızca kodumuzun geri kalanının yaşaması için tek bir global değişken eklemek içindir. Burada (veya kendi dosyalarında) iç içe geçmiş ad alanları da bildirebilirsiniz.
Modül (lar)
SomeComponent.js
myAppNamespace.messageCounter= (function(){
var privateState = 0;
var incrementCount = function () {
privateState += 1;
};
return function (message) {
incrementCount();
//TODO something with the message!
}
})();
Burada yaptığımız şey, uygulamamızdaki bir değişkene bir mesaj sayacı işlevi atamaktır. Biz bir işlev geri döndüren bir fonksiyon hemen yürütmek .
Kavramlar
SomeComponent üst satırında bir şey bildirdiğiniz ad alanı olarak düşünmek için yardımcı olduğunu düşünüyorum. Bunun tek uyarısı, tüm ad alanlarınızın önce başka bir dosyada görünmesi gerektiğidir - bunlar sadece uygulama değişkenimiz tarafından köklenen nesnelerdir.
Ben şu anda bu sadece küçük adımlar attım (i test edebilirsiniz böylece bir extjs app bazı normal javascript yeniden düzenleme) ama 'bu quagmire kaçınarak küçük fonksiyonel birimleri tanımlamak gibi oldukça güzel görünüyor ' .
Bu stili ayrıca, işlevleri toplayan bir nesneyi döndüren ve hemen çağırmayarak bir işlev döndürerek yapıcıları tanımlamak için de kullanabilirsiniz.