ES6类商店

时间:2016-04-05 17:18:10

标签: javascript class ecmascript-6

我只是无法找到存储对声明的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);

每个班级,我想摆脱它。

3 个答案:

答案 0 :(得分:0)

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

var Test = class Test {
   constructor() {

   }
}

allClasses.push(Test);

答案 1 :(得分:0)

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

基本上ES6类被编译为普通的老式Javascript函数。你可以"存储"他们在窗口对象,但这是一个主要的陷阱,因为你正在杀死ES6引入的整个模块模式。

答案 2 :(得分:0)

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

// 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);