Javascript ES6将对象映射到装饰器

Javascript ES6将对象映射到装饰器,javascript,dictionary,design-patterns,ecmascript-6,decorator,Javascript,Dictionary,Design Patterns,Ecmascript 6,Decorator,我想将具有属性(键)的对象映射到装饰器(值)。如果可能的话,我想使用弱贴图。我有一个使用字符串的解决方案,这很好,只是弱映射不接受字符串作为键。这可能是一张地图还是一张单张地图 'use strict'; class Accordion { constructor() {} } let Decorators = new Map(); Decorators.set({nodeName: 'tag-name-here', component: 'accordion'}, (clie

我想将具有属性(键)的对象映射到装饰器(值)。如果可能的话,我想使用弱贴图。我有一个使用字符串的解决方案,这很好,只是弱映射不接受字符串作为键。这可能是一张地图还是一张单张地图

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

它不起作用,因为key:
{nodeName:'tagname here',component:'accordion'}
的不同实例每次都会映射到一个新的内存位置,所以您无法通过这种方式获得所需的值。要使其工作,必须将其设置为新变量,以便代码如下所示:

“严格使用”;
班级手风琴{
构造函数(){}
}
让Decorators=newmap();
const key={nodeName:'tagname here',component:'accordion'};
Decorators.set(key,(client)=>{返回新手风琴(client)});
类客户端{
构造函数(){
让装饰师;
if(Decorators.has(key)){
decorator=Decorators.get(key)(this);
}
console.log(decorator);//这应该返回一个对象
}
}
新客户机()