Bonjour,
J'ai des modules sous forme de classes qui possèdent chacun des méthodes.
Ces modules sont utilisés dans un autre (pas en classe) qui a besoin de regrouper certaines de ces méthodes dans un tableau associatif sans perdre le contexte 'this'.
Pour l'instant dans le constructeur je défini un propriété expose qui associe une fonction à une string en utilisant bind(this)
Une autre fichier "concatène" ces méthodes dans un nouvel objet avec Object.assign() (je penses que c'est pour ça que j'ai besoin de bind les fonction à leur context
Je souhaiterais avoir le même résultat sans avoir à définir 'expose' dans le constructeur (et de préférence sans avoir à binder mais je ne penses pas que se soit possible).
Un exemple ci-dessous, le main require un seul module pour que ce soit plus cours. Je suis obligé d'utiliser des classes là ou il y en a...
Peut-etre y a-t-il une autre solution que le Object.assign() ?
Merci d'avance!
main.js
Code JAVASCRIPT : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 const Repos = require('./repos'); // const OtherTruc = require('./Repos'); // Ce que je fais pour l'instant const expose = Object.assign({}, Repos.users.expose, Repos.tasks.expose, //OtherTruc.expose, ); expose['users.something']('expose'); // affiche "echo doSomething: from expose: TEST" // ce que je souhaiterai const methods = { // 'users.something': Repos.users.doSomething.bind(Repos.users), // fonctionne mais redondant et pas tres beau je trouve... 'users.something': Repos.users.doSomething, 'users.other' : Repos.users.otherStuff, 'tasks.debug' : Repos.tasks.debug, // 'other.bidule': OtherTruc.doBidule } methods['users.something']('methods'); // affiche "echo doSomething: from methods: undefined"
repos.js
Code JAVASCRIPT : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 const Users = require('./users'); const Tasks = require('./tasks'); module.exports = { users: new Users(), tasks: new Tasks(), }
users.js
Code JAVASCRIPT : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 class Users { constructor() { /* hidden for brevity */ this.something = 'TEST' // prop que je souhaite 'supprimer' this.expose = { 'users.something': this.doSomething.bind(this), 'users.other': this.otherStuff.bind(this) } } doSomething(from) { console.log(`echo doSomething: from ${from}: ${this.something}`); } otherStuff(id) { /* hidden for brevity */ } } module.exports = Users;
tasks.js
Code JAVASCRIPT : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class Tasks { constructor() { /* hidden for brevity */ this.expose = { 'tasks.debug': this.debug.bind(this) } } debug() { /* hidden for brevity */ } } module.exports = Tasks;
Partager