2017-09-07 6 views
0

Lorsque vous utilisez le modèle de module pour étendre un module que nous faisons quelque chose comme ceci:motif de module Javascript et des objets vides

var NewModule = (function (Main) { 

    Main.extension = function() {}; 
    return Main; 

})(Main || {}); 

Cela fonctionne très bien et la question est, si principal n'est pas déclaré que nous éviter les erreurs en passant un objet vide Main || {}. Comment éviter que cette dépendance ne se brise? Certes, nous n'aurons pas d'erreurs au début, mais si nous ne sommes pas en mesure d'attacher notre extension à Main, nous allons rencontrer d'autres types d'erreurs.

+0

Est-ce que le désir de l'appeler de temps en temps sans arguments et obtenir un objet avec les méthodes d'extension? –

+0

probablement meilleurs moyens de le faire mais mon sentiment immédiat est juste, je devine, soit a) fatale erreur si votre dépendance racine est manquante (plutôt que de l'ignorer et passer un objet vide) ou b) vérifier les dépendances manquantes partout ailleurs avec les racines frères et soeurs –

+0

@RobM. C'est exact, l'objectif principal est pour 'Main' d'avoir toutes les méthodes disponibles au besoin dans le futur. –

Répondre

1

Si le but est de étendreMain, vous habituellement ne pas attribuer à NewModule. Vous préférez faire

// a.js 
var Main = (function (localMain) { 
    localMain.extensionA = function() {}; 
    return localMain; 
})(Main || {}); 

Nous faisons cela pour que nous puissions avoir plusieurs modules comme ça:

// b.js 
var Main = (function (localMain) { 
    localMain.extensionB = function() {}; 
    return localMain; 
})(Main || {}); 

Tous seront soit créer ou étendre l'objet Main, de sorte qu'il doesn Peu importe dans quel ordre ils chargent - les deux a.js, b.js et b.js, a.js fonctionneront. Le modèle est aussi parfois simplifié à

(function (localMain) { 
    localMain.extension = function() {}; 
})(Main = Main || {}); 

(bien que la déclaration manque var).

Si votre module (en particulier votre nouveau module) a effectivement une dépendance sur le module principal, et nécessite qu'il ait été chargé avant d'être exécuté, vous n'utiliserez pas ce modèle par défaut.