【问题标题】:ES6/ES7 extend class with same nameES6/ES7 扩展类同名
【发布时间】:2020-04-28 11:48:18
【问题描述】:

由于模块的条件导入还没有实现,我该如何扩展或覆盖同一个类:

// I have a main class
// main.js
export default class Main {}

// Main class is used by myClass
class myClass {
  constructor(){
    new Main()
  }
}

// I have an extended main class
// main-extended.js
export default class MainExtended extends Main {}

// the MainExtended is now used by myClass
export class myClass {
  constructor(){
    new MainExtended()
  }
}


// third-class.js
// now I need to do this with any class I can find, 
// preferably with the extended version of both, if both defined
export default class ThirdClass {
  constructor(...args){
    return new myClass(...args)    
  }
}


// destinations

// index.js
import Main, {myClass} from main.js
import ThirdClass from third-class.js


// index-extended.js
import MainExtended, {myClass} from main-extended.js
import ThirdClass from third-class.js



问题是,由于某种原因,index.js 编译后还包含myClass 调用MainExtended,所以我决定只在index-extended 中包含ThirdClass,作为MainExtended 的附加功能。

但我仍然想知道是否有其他方法。

【问题讨论】:

  • 为什么需要用同名的子类覆盖一个类?好像an XY problem
  • 因为我有 2 个单独的目标用于这 2 个需要具有相同名称的函数。让我用一些信息更新问题,我似乎必须解释一些东西。
  • 抱歉,您更新的代码无法进一步说明您真正想要什么。如果有的话,我比以前更困惑了。
  • Because I have 2 separate destinations for these 2 functions that need to have same name。你想创建一个接受多种类型子类的接口吗?请发布您的实际问题,以提供有关为什么需要两个具有相同名称的类的上下文;几乎可以肯定,有更好的解决方案。
  • @ggorlen 更新问题,请查看。我认为你在做某事。

标签: javascript class ecmascript-6 extends


【解决方案1】:

就像 VLAZ 在 cmets 中所说的那样,我不能 100% 确定你在问什么,但你能做这样的事情吗?

解决方案 1

class MyClass {
  constructor(_main){
    myMain = _main;
  }
}

const regularMain = new MyClass(new Main());
const extendedMain = new MyClass(new MainExtended());

【讨论】:

  • 在正常情况下,标志参数是一种代码气味,但这是一个构造函数,因此它似乎比仅将标志参数传递给方法更糟糕。如果添加class MainMoreExtended extends MainExtended,这将如何扩展?
  • 是的,这很公平……我主要是想弄清楚这里的实际问题是什么。
  • 我也是,我真的不明白。也许 OP 正在寻找它们导入的依赖注入,比如 SomeClass 类型,但在运行时交付的是它的子类。但这真的很难说。
  • 随着问题的最终更新,答案的更新似乎是 OP 正在寻找的。​​span>
猜你喜欢
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 2023-03-19
相关资源
最近更新 更多