URL: https://linuxfr.org/forums/programmationweb/posts/question-sur-les-factories-en-js Title: Question sur les factories en Js Authors: romu Date: 2016年03月30日T16:58:22+02:00 License: CC By-SA Tags: nodejs et javascript Score: 2 Bonjour, Attention : DÉBUTANT en Js. Je me mets au Js, côté serveur (donc avec Node). L'envie d'apprendre un nouveau et avec lequel je peux tout faire si j'en ai envie, du script shell au web côté client. Et comme je viens de la vieille école (C++/C#), j'essaie de faire les choses bien. Parmi la pléthore de moyens pour créer des objets en Js, j'ai choisi d'utiliser la notation littérale et les "factories" pour créer les instances. Ca donne donc un truc comme ça : ```js // ES6 only 'use strict'; // The base object, "object literal" syntax let animal2 = { // public member animalType: 'animal', // public method describe() { return `This is "${this.animalType}"`; } }; // factory function which serves 2 purposes: // - encapsulation, that's where private things are declared thanks to closures // - the "real" object creation, this prevents to use "new" which is not really Js-ish let afc = function afc() { // private member let priv = "secret from afc"; return Object.create(animal2, { // Object customisation animalType: { value: 'animal with create'}, // object extension. The new objects created here get 3 new members: // - a private member // - a new property // - a new method to access the private member // new public member color: { value: 'green' }, secret: { get: function () { return priv; }, set: function (value) { priv = value; }, }, KO1() { console.log("KO1"); }, KO2: function() { console.log("KO2"); } }); } // creation of an animal instance let tac = afc(); ``` Désolé si le code est en Anglais, je fais ça depuis 20 ans, et j'ai pas envie de changer ! Ce code fonctionne plutôt pas mal. Cependant je n'arrive pas appréhender la syntaxe pour écrire une méthode qui soit autre chose qu'un accesseur, mais qui permette néanmoins la manipulation de membres privés. Je mets ici 2 exemples de syntaxe qui me viennent à l'esprit, mais quand je lance un tel code avec Node, j'obtiens "KOx is not a function". J'apprécie tous les conseils, bonnes pratiques, etc ... et une proposition pour implémenter cette satanée fonction. Merci.