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:
-
Uso di
prototype
var myModule = function() { this.myProperty = 1; } myModule.prototype.myMethod = function() { //... } //...
-
Usando un oggetto:
var myModule = { myProperty: 1, myMethod: function() { //... } //... }
-
Uso di una funzione immediatamente / auto-invocata:
var myModule = (function() { var myProperty = 1; this.myMethod = function() { //... } //... return this; })();
-
Utilizzo di una funzione normale (e inizializzazione con
new
):var myModule = function() { this.myProperty = 1; this.myMethod = function() { //... } //... };
-
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.