Javascript 如何让模块自动将其名称传递给另一个模块,而不必将其作为道具传递

Javascript 如何让模块自动将其名称传递给另一个模块,而不必将其作为道具传递,javascript,ecmascript-6,Javascript,Ecmascript 6,我试图重构一些代码,其中各个模块具有相同的自定义帮助器方法。我尝试将该方法移动到一个预先存在的helper模块,然后将其导入到每个需要它的模块中,而不是每个模块都有自己的helper方法实现。通用方法应该管理this.components对象内的状态 下面是一个简化的示例,每个代码段都在一个类中。实际上,helper方法在很多地方都有使用,对其工作方式的一个小小的更改将需要在其他地方进行许多更改 助手方法(示例) setComponent=(组件,标签)=>{ this.components.p

我试图重构一些代码,其中各个模块具有相同的自定义帮助器方法。我尝试将该方法移动到一个预先存在的helper模块,然后将其导入到每个需要它的模块中,而不是每个模块都有自己的helper方法实现。通用方法应该管理
this.components
对象内的状态

下面是一个简化的示例,每个代码段都在一个类中。实际上,helper方法在很多地方都有使用,对其工作方式的一个小小的更改将需要在其他地方进行许多更改

助手方法(示例)

setComponent=(组件,标签)=>{
this.components.push({component,label});
}
我可以像这样导入和使用

从“/helpers”导入{setComponent};
...
setComponent(this.button,“example”);
我还希望能够删除为特定模块设置的所有组件。例如:

removeComponents=module=>{
//按模块拆下组件
}
从“/helpers”导入{removeComponents};
...
移除组件('moduleName');
这里的问题是,
this.components
需要在每次调用
setComponent
时传递一个模块名,以便它有一个键,用于在
removeComponents
中删除正确的组件
setComponent
将需要一个额外的
模块
参数

setComponent=(组件、标签、模块)=>{
this.components.push({component,label,module});
}
虽然这样做有效,但会在每个模块中产生膨胀问题。现在,每次调用
setComponent
,它都必须传递相同的模块名

setComponent(this.a,'example1','thisModule');
setComponent(this.b,'example2','thisModule');
setComponent(this.c,'example3','thisModule');
setComponent(this.d,'example4','thisModule');
setComponent(this.e,'example5','thisModule');
...
模块名参数可以抽象出来,每个模块都可以使用一个本地方法,将本地模块名和组件数据对象一起传递给
helper.setComponent

从“/helpers”导入{setComponent as helperSetComponent};
...
//使用本地setComponent方法将组件数据传递给
//助手的setComponent以及此模块的名称
setComponent=(组件,标签)=>helperSetComponent(组件,标签,'thisModule');
...
this.setComponent(this.button,'example');
但现在我又回到了原点。在尝试使用通用方法时,我必须创建一个本地处理程序方法,以使一切正常工作

是否有另一种香草JS方法可以做到这一点,它不会在过程中产生任何额外的代码膨胀,并且不会引入React/Redux/Angular/Vue等。?打开ESnext选项。

编辑:Bergi提出的咖喱功能建议

在本地模块中:


//局部辅助函数
setComponent=helperSetComponent(组件,标签)('thisModule');
在帮助文件中:

setComponent=module=>(组件,标签)=>{
this.components.push({component,label,module});
}

No,您将需要一个本地助手函数,但您可以通过简单地调用curried函数而不是声明包装器来构造它function@Bergi我编辑了问题并添加了一个咖喱示例。是这样吗?感谢您的帮助,而不是const helperSetComponent=setComponent('thisModule'),然后将其多次用作
helperSetComponent(这个.e,'example5')
aaaaaaaah cool。太棒了。必须测试一下才能得到它。非常感谢。