【问题标题】:ES6 class store [duplicate]ES6类商店[重复]
【发布时间】:2016-04-05 17:18:10
【问题描述】:

我只是找不到声明的 ES6 类的引用存储在哪里,我本来希望它们在窗口对象中,但它们并没有出现在那里。

我认为这不是 ES6 classes : what about instrospection? 的副本,因为他要求对某个类进行存在性检查,我想要的是可用类的列表。

例如:

class Test {
    constructor() {

    }
}

window.Test // undefined

我想要的是扩展我的一个类的所有类的列表

为了澄清我的结构看起来像这样:

class Base {
    constructor(components) {
        for(let component of components) {
            window[component](); // window.Test2 not defined
        }
    }

    start() {
        new this();
    }
}

class Test2 extends Base {
    constructor() {
        super();
    }
}

class Test extends Base {
    constructor() {
        super(['Test2','Test2']);
    }
}

Test.start();

这只是我的结构的抽象,总之我必须在super(['Test2', 'Test2'])使用字符串

目前我正在做这样的事情

Base.register(Test2);

对于每一堂课,我都想摆脱它。

【问题讨论】:

  • 您不能只“获取”所有类的“列表”。你将不得不做一些可怕的事情,比如创建一个全局对象来存储它们。
  • 你可以尝试从一个已知的类开始,比如 String,然后提升原型链,直到找到其他类。它们可能并不都在同一个地方,或者都继承自相同的东西。
  • “我真正想要的是扩展我的一个类的所有类的列表”这是不可能的。

标签: javascript class ecmascript-6


【解决方案1】:

您可以使用Class expressions 将它们存储在某种数组中,但如果我是您,我可能不会这样做。

var Test = class Test {
   constructor() {

   }
}

allClasses.push(Test);

【讨论】:

  • 如果是你不会做的事情,那就不值得回答了。
【解决方案2】:

JavaScript 类是在 ECMAScript 6 中引入的,是 JavaScript 现有的基于原型的继承的语法糖。类语法并未向 JavaScript 引入新的面向对象的继承模型。 JavaScript 类提供了一种更简单、更清晰的语法来创建对象和处理继承。

基本上 ES6 类被编译为普通的老式 Javascript 函数。您可以将它们“存储”在窗口对象中,但这是一个主要缺陷,因为您正在扼杀 ES6 引入的整个模块模式。

【讨论】:

    【解决方案3】:

    如果你想要类的“模块”,理论上你可以这样做:

    // some-class.js
    
    export default class SomeClass {}
    

    然后:

    // another-class.js
    
    export default class AnotherClass {}
    

    还有你的入口文件:

    // index.js
    
    import SomeClass from './some-class.js' // extensions optional; here just for clarity
    import AnotherClass from './another-class.js'
    
    export default {
      SomeClass,
      AnotherClass
    }
    

    如果您将所有这些嵌入到同一个目录中(我们将目录称为example),您可以将整个模块导入到任何您需要的地方:

    // something-that-requires-your-module.js
    
    // this will by default enter through the `index.js` file of your `example` directory
    import Example from './example';
    
    console.log(Example.SomeClass);
    console.log(Example.AnotherClass);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 2021-09-27
      • 2016-02-11
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      相关资源
      最近更新 更多