JavaScript Fonctions d'usine


Exemple

Une fonction usine est simplement une fonction qui renvoie un objet.

Les fonctions d'usine ne nécessitent pas l'utilisation du mot-clé new , mais peuvent toujours être utilisées pour initialiser un objet, comme un constructeur.

Souvent, les fonctions d'usine sont utilisées comme wrappers API, comme dans le cas de jQuery et moment.js , de sorte que les utilisateurs n'ont pas besoin d'utiliser new .

Ce qui suit est la forme la plus simple de la fonction d'usine; prendre des arguments et les utiliser pour créer un nouvel objet avec le littéral objet:

function cowFactory(name) {
    return {
        name: name,
        talk: function () {
            console.log('Moo, my name is ' + this.name);
        },
    };
}

var daisy = cowFactory('Daisy');  // create a cow named Daisy
daisy.talk();  // "Moo, my name is Daisy"

Il est facile de définir des propriétés et des méthodes privées dans une fabrique, en les incluant en dehors de l'objet renvoyé. Cela conserve vos détails d'implémentation encapsulés, de sorte que vous ne pouvez exposer que l'interface publique à votre objet.

function cowFactory(name) {
    function formalName() {
        return name + ' the cow';
    }

    return {
        talk: function () {
            console.log('Moo, my name is ' + formalName());
        },
    };
}

var daisy = cowFactory('Daisy');
daisy.talk();  // "Moo, my name is Daisy the cow"
daisy.formalName();  // ERROR: daisy.formalName is not a function

La dernière ligne donnera une erreur car la fonction formalName est fermée dans la fonction cowFactory . Ceci est une fermeture .

Les usines sont également un excellent moyen d'appliquer des pratiques de programmation fonctionnelle en JavaScript, car ce sont des fonctions.