0

Ich mag würde ein Objekt mit Eigenschaften (Schlüssel) zu einem Dekorateur (Wert) abzubilden. Ich würde gerne eine schwache Karte verwenden, wenn möglich. Ich habe eine Lösung, die mit einer Zeichenfolge arbeitet, was in Ordnung ist, außer dass schwache Karten keine Zeichenfolgen als Schlüssel akzeptieren. Ist dies mit einer Map oder einer WeakMap möglich?ES6 Map ein Objekt zu einem Dekorateur

'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(); 

Antwort

1

Es funktioniert nicht, weil andere Instanz Schlüssel: {nodeName: 'tag-name-here', component: 'accordion'} jedes Mal zu einem neuen Speicherplatz abbildet, so dass Sie Ihren gewünschten Wert erhalten werden können, nicht auf diese Weise. Damit es funktioniert, können Sie es auf eine neue Variable zu setzen haben, so dass Ihr Code sieht wie folgt aus:

'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();

Verwandte Themen