我只是无法找到存储对声明的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);
每个班级,我想摆脱它。
答案 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);