0

Je voudrais mapper un objet avec des propriétés (clé) à un décorateur (valeur). Je voudrais utiliser une carte faible si possible. J'ai une solution qui fonctionne en utilisant une chaîne, ce qui est bien sauf que les cartes faibles n'acceptent pas les chaînes comme des clés. Est-ce possible avec une carte ou un WeakMap?ES6 Mapper un objet à un décorateur

'use strict'; 

class Accordion { 

    constructor() {} 

} 

let Decorators = new Map(); 

Decorators.set({nodeName: 'tag-name-here', component: 'accordion'}, (client) => { return new Accordion(client) }); 

class Client { 

    constructor() { 

     let key = {nodeName: 'tag-name-here', component: 'accordion'} 
     let decorator; 

     if (Decorators.has(key)) { 

      decorator = Decorators.get(key)(this); 

     } 

     console.log(decorator); //undefined, unless I use a string as a key. 
    } 
} 

new Client(); 

Répondre

1

Il ne fonctionne pas parce que différentes instance de clé: {nodeName: 'tag-name-here', component: 'accordion'} tracera vers un nouvel emplacement de mémoire à chaque fois, donc vous ne serez pas en mesure d'obtenir la valeur désirée de cette façon. Pour le faire fonctionner, vous devez le mettre à une nouvelle variable, de sorte que votre code ressemble à ceci:

'use strict'; 
 

 
class Accordion { 
 

 
    constructor() {} 
 

 
} 
 

 
let Decorators = new Map(); 
 

 
const key = {nodeName: 'tag-name-here', component: 'accordion'}; 
 
Decorators.set(key, (client) => { return new Accordion(client) }); 
 

 
class Client { 
 

 
    constructor() { 
 
     let decorator; 
 

 
     if (Decorators.has(key)) { 
 

 
      decorator = Decorators.get(key)(this); 
 

 
     } 
 

 
     console.log(decorator); // this should return an object 
 
    } 
 
} 
 

 
new Client();