Os módulos são parte integrante de qualquer aplicativo poderoso e geralmente nos ajudam a separar e organizar claramente as unidades de código em projetos.
Métodos para implementar módulos em JS:
1. Representação literal do objeto
2. Modo Módulo
3. Módulo AMD
4. Módulo Commonjs
5.CMAScript Harmony Módulo
Objeto literal
Os literais de objetos não precisam ser instantados usando o novo operador, mas não podem ser usados no início de uma declaração, porque o início pode ser interpretado como o início de um bloco. Fora do objeto, novos membros podem ser adicionados ao objeto literal usando a seguinte declaração de atribuição, mymodule.property = "algum valor".
var myModule = {myProperty: "SomeValue", myconfig: {usecaching: true, idioma: "en"}, // método básico mymethod: function () {// ...}, // Saída de informações com base na configuração atual "+mymethod: function () {console.Log (" caching é: " "Habiled": "desativado"); }, // Reescreva a configuração atual myMethod3: function (newConfig) {if (typeof newConfig === "object") {this.myConfig = newConfig; console.log (this.myconfig.language); }},}; mymodule.mymethod3 ({idioma: "fr", usecaching: false})O uso de literais de objetos ajuda a encapsular e organizar o código.
No JavaScript, o padrão do módulo é usado para simular ainda mais o conceito de classes, de que maneira um objeto separado pode ter métodos e variáveis públicos/privados, bloqueando assim peças especiais do escopo global.
O padrão do módulo usa o fechamento para encapsular o estado e a organização "privados". Ele fornece uma maneira de embrulhar uma mistura de métodos e variáveis públicas/privadas para evitar vazamentos para o escopo global e conflitos com as interfaces de outros desenvolvedores. Por esse modo, você só precisa devolver uma API pública e tudo o mais é mantido em um fechamento privado.
No modo de módulo, devido à existência de fechamentos, variáveis e métodos declarados estão disponíveis apenas dentro do modo, mas variáveis e métodos definidos no objeto de retorno estão disponíveis para usuários externos.
Implementação do modo de módulo
var testModule = (function () {var counter = 0; return {incrementCounter: function () {return ++ contat;}, resetCounter: function () {console.log ("valor do contador antes da redefinição" +contador); contador = 0;}}} (); // aumenta o contador testmodule.InCrentCounter (); testmodule.resetCounter ();A outra parte do código é que o incrementCounter () e o resetCounter () não podem ser lidos diretamente. A variável do contador é realmente completamente isolada do escopo global, por isso age como uma variável privada cuja existência é limitada ao fechamento do módulo, porque o único código que pode acessar seu escopo são essas duas funções. O método acima define efetivamente o espaço para nome; portanto, no código de teste, todas as chamadas precisam ser prefixadas.
// Modo de módulo contendo namespace, variáveis públicas e privadas var myNamspace = (function () {// variável de contador privado var myPrivateVar = 0; // função privada var myPrivatemethod = function (foo) {console.log (foo);}; retorno {// public variable mAbublicVar: "fOO);}; MyPublicFuncion: function (bar) {myPrivateVar ++;Referência de variáveis globais
O JavaScript possui um recurso chamado variáveis globais implícitas. Independentemente de uma variável ter sido usada ou não, o intérprete JavaScript reverte a cadeia do escopo para encontrar a declaração VAR de toda a variável. Se o VAR não for encontrado, o intérprete pressupõe que a variável seja uma variável global. Se a variável for usada para operação de atribuição, se não existir antes, o intérprete o criará automaticamente. Isso significa que é muito fácil de usar ou criar variáveis globais em fechamentos anônimos, mas o mais difícil é que o código é difícil de gerenciar, especialmente quando as pessoas que leem o código vêem muitas diferenças entre as quais as variáveis são globais e quais são locais.
Felizmente, em funções anônimas, podemos fornecer uma alternativa relativamente simples. Podemos passar variáveis globais em funções anônimas como um parâmetro e usá -las. Comparado com variáveis globais implícitas, é claro e rápido. Vamos dar um exemplo:
// módulo global var myModule = (function (jq, _) {função privatemethod1 () {jq (". Contêiner"). Html (test);} return {publicMethod: function () {privatemethod1 ();}}}) (jQuery, _); mymodule.publicMethod (); // módulo global var myModule = (function () {// Module Objeto var módulo = {}; privateVariAe = "hello"; function privatemethod () {//...module.publy) (fOOBAR}; módulo;Declare variáveis globais sem implementá -las e também pode apoiar o conceito de introdução global
Ainda existem certas deficiências no modo de módulo:
1. Como acessamos membros públicos e privados de maneira diferente, quando queremos mudar de visibilidade, realmente precisamos modificar cada existência que já usou esse membro.
2. Não podemos acessar esses membros privados adicionados ao método posteriormente.
3. Não é possível criar testes de unidade automatizados para membros privados, e a complexidade adicional é adicionada quando os bugs precisam ser corrigidos.
4. Os desenvolvedores não podem estender facilmente métodos privados
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.