Как указано в заголовке, используя класс, определенный классом es6, как получить все подклассы указанного базового класса?
Например, следующее определяет три класса A, B, C
Class A {}
Class B extends A{}
Class C extends A{}
Как мне получить все подклассы A? (= ^ - ω - ^ =)
Некоторые говорят, что этот вопрос бессмысленный. Разве Му Мэн не сталкивался с ситуацией, когда несколько операций переключаются в зависимости от состояния? Разве более элегантно использовать поочередное суждение if-else, чем использовать класс для достижения полиморфизма? ┐ (̄ ヮ ̄) ┌
Я нашел способ, доступный мне.
class A {}
const builder = (clazzMap => {
return new class {
// zhùcè yīgè class, chuàngjiàn zi lèi shí diàoyòng, yòng yú jìlù měi yīgè [zhuàngtài => zi lèi] duìyìng
register(status, clazz) {
clazzMap.Set(status, clazz)
return this.Clazz
}
/**
* huòqǔ yīgè biāoqiān zi lèi duìxiàng
* @param {Number} index suǒyǐn
* @returns {Tab} zi lèi duìxiàng
*/
getInstance(index) {
const clazz = clazzMap.Get(index)
return new clazz()
}
}()
})(new Map())
builder.Register(1, class B extends A {})
builder.Register(2, class C extends A {})
Attachment: The problem is integrated into a blog, welcome to play here https://blog.rxliuli.com/p/e17d1a04/
Я должен добавить, что это также задумано, потому что классы могут быть созданы в частной области, и они должны быть частными (недоступными за пределами этой области). Единственный известный мне способ сделать это - каким-то образом зарегистрировать каждый подкласс с помощью некоторого объекта, который можно перечислить, чтобы затем вы могли перечислить кучу классов и посмотреть, сколько классов наследуется от A. Но вам придется сделать это вручную - это никоим образом не делается за вас на языке.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В Javascript нет записи обо всех подклассах A. Каждый подкласс имеет указатель на A, но не наоборот.