Bonjour/bonsoir,
Je me demandais si il était possible de créer un objet dont le nom serait une variable, mais le tout au sein d'une fonction voir une IIFE.
Ceci fontionne
et je n'arrive pas a faire ceci, puisque le this se réfère a l'objet Window
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 function Person() {}; var name = 'Person'; var inst = new this[name]; console.log('inst :', inst);
J'ai beau essayé toute sorte de truc, mais impossible pour moi de le faire fonctionner..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 let iife = (function () { function Person() {}; var name = 'Person'; // console.log('this :', this); // => Window*{postMessage: , blur: , focus: , close: , frames: Window,* } var inst = new this[name]; console.log('inst IFFE :', inst); // => Uncaught TypeError: this[name] is not a constructor })();
J'aurai aussi aimer savoir si c’était une bonne idée de "coder" comme cela?!
Pour la petite histoire, j’apprends a utiliser les Factory Pattern (https://addyosmani.com/resources/ess...ternjavascript).
Et je me disais, pourquoi coder en dur le nom des objet que je veux créer?
Si c'est pour utiliser une Factory Pattern, autant créer une fonction qui permet de créer l'objet que l'on veut en lui passant le nom en paramètre et qu'elle me retourne l'Objet/Class.
Dans l'exercice que j'ai reçu a faire en formation, on nous demande de créer des Objets/Class sur la base d'un fichier json contentant des infos sur des Guest et des Vip. Leurs propriétés sont les mêmes (nom, prenom, ...).
Mon idée était de faire une 'superClass' Person contenant le squelette et de créer a la volée un Objet de type Guest ou Vip via cette fameuse Factory Pattern, elle même dans une IIFE pour n'exposer que la fonction 'createObject(className)'
En définitive, j'ai du m'en résoudre a ce bout de code au sein de ma fonction IIFE ObjectFactory
Ce qui va un peu a l'encontre de ce que je voulais faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 function objectFactory(someUser) { switch (someUser.userClass) { case 'Guest': this.userClass = Guest; break; case 'Vip': this.userClass = Vip; default: break; } return this.userClass(someUser); };
Bref, je ne pensais pas être aussi long
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 function objectFactory(someUser) { this.userClass = someUser.userClass; return this.userClass(someUser); };
Que me conseillez vous ??
Partager