javascript - 查找 Javascript 应用程序中扩展基类的所有类

标签 javascript oop ecmascript-6 ecmascript-harmony

我有这样的代码

class Animal{}
class Dog extends Animal {}
class Cat extends Animal {}
class Donkey extends Animal {}

我想查看应用程序宇宙中的所有类,当我找到一个从 Animal 派生的类时,我想创建一个该类型的新对象并将其添加到列表中。这允许我添加功能而无需更新事物列表。所以我可以避免以下情况:

var animals = [];
animals.push( new Dog() );
animals.push( new Cat() );
animals.push( new Donkey() );

PS:我不想向我的类添加额外的功能或显式调用它们。

最佳答案

我认为您可以使用装饰器。例如,您可以创建一个 @Extends() 并提供基类作为参数,例如@Extends(Animal)。在装饰器函数中,您可以获取用 @Extends 装饰的类的名称,并将其放入数组或对象中。不知道它是否适用于浏览器,但应该适用。在带有 TypeScript 的 Node 中,我会做类似的事情:

import { MyClassMetadata } from './';

export function Extends(parent): (...args: any[]) => void {
    return (target: object): void => {
        MyClassMetadata.someVariableToStoreChildren[parent.constructor.name].push(
            target,
        );
    }
}

然后您可以访问存储给定类的子级数组的 MyClassMetadata 变量,并按您想要的方式使用它。您可以使用它并获得所需的结果。

关于javascript - 查找 Javascript 应用程序中扩展基类的所有类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31618212/

相关文章:

php - 如何命名我的类(class)?

c# - 如果 child 没有 parent 就不能存在,那么 child 的 parent 引用是否合理?

javascript - 在另一个对象内创建动态对象

javascript - div的背景不会改变透明度

javascript - Google 饼图未在浏览器中显示

oop - 在加载类时执行方法

javascript - 如何分配给闭包内外部嵌套哈希中的键

ios - 如果我们在 React Native 中打开控制中心,应用程序会在 iOS 中崩溃

javascript - 从弹出窗口重定向时恢复窗口大小

javascript - 添加 Assets 过滤器修复后 CakePHP 主题 CSS 和 JS 损坏