Esiste un design / architettura consigliato durante lo sviluppo di un modulo JavaScript?

2

Praticando alcune delle funzionalità di ES7, ho iniziato a sviluppare una classe per eseguire alcune azioni sul DOM e utilizzare le nuove funzionalità. Ho usato Babel per farlo funzionare sul browser e il codice ha un aspetto simile al seguente:

class myModule {
  constructor() {
    this.myProperty = 1;
  }
  myMethod = () => {
    //...
  }
  //...
}

Ora volevo farlo funzionare come un piccolo plugin / modulo / libreria in vanilla JS. Ho iniziato a cercare su questo sito e online e ho visto che l'architettura dei diversi plugin / moduli che ho trovato assomiglia a uno di questi:

  1. Uso di prototype

    var myModule = function() {
      this.myProperty = 1;
    }
    myModule.prototype.myMethod = function() {
      //...
    }
    //...
    
  2. Usando un oggetto:

    var myModule = {
      myProperty: 1,
      myMethod: function() {
        //...
      }
      //...
    }
    
  3. Uso di una funzione immediatamente / auto-invocata:

    var myModule = (function() {
      var myProperty = 1; 
      this.myMethod = function() {
        //...
      }
      //...
      return this;
    })();
    
  4. Utilizzo di una funzione normale (e inizializzazione con new ):

    var myModule = function() {
      this.myProperty = 1; 
      this.myMethod = function() {
        //...
      }
      //...
    };
    
  5. Usando una funzione che restituisce un oggetto (sembra una combinazione di 2 e 4, ci sono alcune varianti):

    var myModule = function() {
      var myProperty = 1; 
      function myMethod() {
        //...
      }
      return {
        myProperty: myProperty,
        myMethod: myMethod
      }
    };
    

Il codice compilato con Babel sembra il 4 in questa lista, e l'ho lasciato così; ma è meglio usare uno degli altri metodi (o un modo diverso tutti insieme)? E per "migliore" intendo una best practice o un modo standard di progettarli.

    
posta Alvaro Montoro 26.08.2018 - 07:04
fonte

0 risposte

Leggi altre domande sui tag