Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 合并来自不同类的switch语句_Javascript_Typescript_Merge - Fatal编程技术网

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将起作用。”“默认”操作被排除,因此没有任何东西阻止它们被合成。