J'ai bien peur de ne pouvoir te renseigner sur les bonnes pratiques... je doutes de ne pas dire plus de bêtises qu'autre chose, et je ne crée plus que très rarement des classes en js.
Ceci dit, je propose cette syntaxe,
functionAnimal(){this.race='cheval'this.cri='hheeeinnnn'this.describe=function(){return'whatever';}console.log(' ctor animal')}Animal.prototype.what='ever';functionAnimal2(){Animal.call(this);console.log(' ctor animal2')this.tomate=function(){}}// Dans le browserAnimal2.prototype=Object.create(Animal.prototype);// pareil que: Animal2 extends Animal// Avec node, // require('util').inherits(Animal2, Animal); // pareil que: Animal2 extends AnimalAnimal2.prototype.some='other';functionanimalFactory(which){varmaBete;if(which==='chat'){maBete=newAnimal2();maBete.race='chat'maBete.cri='miaou'varprivateSecret='MIIIAAAAAOOOOUUUU'maBete.passCode=function(){returnprivateSecret;}}else{maBete=newAnimal();}returnmaBete;}varchat=animalFactory('chat')varcheval=animalFactory('cheval')console.log('');console.log('chat est un animal: %s',chatinstanceofAnimal);console.log('cheval est un animal: %s',chevalinstanceofAnimal);console.log('');console.log('chat est un animal2: %s',chatinstanceofAnimal2);console.log('cheval est un animal2: %s',chevalinstanceofAnimal2);console.log('');console.log('chat %j',chat);console.log('cheval %j',cheval);console.log('');console.log('chat properties');for(varninchat){console.log('%s : %s',n,chat[n])}// note l'affichage des propriétés 'some' and 'what'console.log('');console.log('chat.keys() %j',Object.keys(chat))console.log('');console.log('cheval properties');for(varnincheval){console.log('%s %s',n,cheval[n])}// note l'affichage de la propriété 'what'console.log('');console.log('cheval.keys() %j',Object.keys(cheval))
tldr; ma préférence à moi
- pas d'Object.create,
- si je dois faire un getter, je fais une variable définie dans un scope et une méthode pour y accéder
- si je veux faire une propriété publique, je fais une propriété d'objet. Si je venais à avoir des problèmes et que j'avais soudainement le besoin de capturer le set/get, je me tournerais vers Object.defineProperty
# sans prétentions
Posté par mh-cbon . En réponse au message Question sur les factories en Js. Évalué à 2.
J'ai bien peur de ne pouvoir te renseigner sur les bonnes pratiques... je doutes de ne pas dire plus de bêtises qu'autre chose, et je ne crée plus que très rarement des classes en js.
Ceci dit, je propose cette syntaxe,
tldr; ma préférence à moi
- pas d'Object.create,
- si je dois faire un getter, je fais une variable définie dans un scope et une méthode pour y accéder
- si je veux faire une propriété publique, je fais une propriété d'objet. Si je venais à avoir des problèmes et que j'avais soudainement le besoin de capturer le set/get, je me tournerais vers Object.defineProperty
Voir,
- https://nodejs.org/docs/latest/api/util.html#util_util_inherits_constructor_superconstructor
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create
Finalement, je n'aurais pas utiliser es6. C'est mon gout comme c'est ton choix, mais c'est la mode pas comme evelyne thomas.