RequireJS: Comment définir des modules qui contiennent une seule “classe”?
J'ai un certain nombre de JavaScript "classes" chaque mis en œuvre dans son propre fichier JavaScript. Pour le développement de ces fichiers sont chargés individuellement, et pour la production ils sont concaténés, mais dans les deux cas, j'ai pour définir manuellement un ordre de chargement, s'assurer que B vient après Un si B utilise A. je suis à la planification de l'utilisation de RequireJS comme une mise en œuvre de CommonJS Modules/AsynchronousDefinition pour résoudre ce problème automatiquement pour moi.
Est-il une meilleure façon de le faire que de définir des modules d'exportation classe? Si non, comment vous le nom de ce que le module d'exportation? Un module "employé" de l'exportation d'une catégorie "Employé", comme dans l'exemple ci-dessous, ne se sent pas SEC assez pour moi.
define("employee", ["exports"], function(exports) {
exports.Employee = function(first, last) {
this.first = first;
this.last = last;
};
});
define("main", ["employee"], function (employee) {
var john = new employee.Employee("John", "Smith");
});
Vous devez vous connecter pour publier un commentaire.
La AMD proposition vous permet de retourner une valeur pour l'objet exporté. Mais remarque, qui est une caractéristique de l'AMD proposition, c'est juste une API proposition, et il sera plus difficile de traduire le module de retour régulier de CommonJS module. Je pense que c'est OK, mais l'info utile à savoir.
De sorte que vous pouvez effectuer les opérations suivantes:
Je préfère les modules que l'exportation d'une fonction constructeur pour commencer avec une majuscule, le nom, de sorte que le non-version optimisée de ce module serait également en Employee.js
Maintenant dans un autre module, vous pouvez utiliser l'Employé module comme suit:
Comme un complément à jrburke réponse, notez que vous n'avez pas de retour de la fonction constructeur directement. Pour la plupart des classes utiles vous devrez également ajouter des méthodes via le prototype, qui vous pouvez le faire comme ceci:
En fait, c'est exactement le modèle présenté dans cet exemple à requirejs.org.