Javascript 合并来自不同类的switch语句
除了重写函数并手动写入Javascript 合并来自不同类的switch语句,javascript,typescript,merge,Javascript,Typescript,Merge,除了重写函数并手动写入switch语句,或者从ClassB复制粘贴switch并将其粘贴到ClassA的开关之后,是否有其他方法将来自2个不同类但具有相同函数名的switch语句组合为1 A类: protected casesHandler(): void { switch (case){ case 0: break; default: super.caseHa
switch
语句,或者从ClassB复制粘贴switch
并将其粘贴到ClassA的开关之后,是否有其他方法将来自2个不同类但具有相同函数名的switch
语句组合为1
A类:
protected casesHandler(): void
{
switch (case){
case 0:
break;
default:
super.caseHandler();
}
}
B类:
protected casesHandler(): void
{
switch (case){
case 1:
break;
default:
super.caseHandler();
}
}
期望结果:
protected casesHandler(): void
{
switch (case){
case 0:
break;
case 1:
break;
default:
super.caseHandler();
}
}
试图避免:
protected casesHandler(): void
{
switch (case){
case 0:
break;
default:
super.caseHandler();
}
switch (case){
case 1:
break;
default:
super.caseHandler();
}
}
没有办法做到这一点,但即使你能以某种方式做到这一点,它看起来也不像是干净的代码
您可以将此逻辑隔离到一个简单的函数中,并在需要时导入:
export const casesHandler = (case: number): void => {
switch (case) {
case 0:
// code
case 1:
// code
default:
// code
}
}
这些功能并不相似<super中的code>super
。因此,default
在这些casesHandler
方法中是不同的,重写casesHandler
没有什么错
为了实现这一点,可能会有遵循某种惯例的抽象:
protected casesHandler(): boolean {
switch (case) {
case 0:
break;
default:
return false;
}
return true;
}
protected casesWithDefaultHandler(): void
const isCaseSolved = this.casesHandler();
if (!isCaseSolved)
super.caseHandler();
}
然后可以组合几个casesHandler
函数。假设ClassA和ClassB实际上是某种插件。两者都扩展了ClassC。因此,根据情况,将相应地使用A类和B类。但在某些特殊情况下,插件的两个功能都是必需的。默认情况下,类A和类B实际上是超级返回到类C中的同一个函数。或者现在可以忽略默认值。好吧,假设类A和类B实际上是某种插件。两者都扩展了ClassC。因此,根据情况,将相应地使用A类和B类。但在某些特殊情况下,插件的两个功能都是必需的。默认情况下,类A和类B实际上是超级返回到类C中的同一个函数。或者现在可以忽略默认值。我猜上面代码中的casesHandler将起作用。”“默认”操作被排除,因此没有任何东西阻止它们被合成。