2016-04-05 3 views
-1

Я просто не могу узнать, где хранятся ссылки на объявленные классы ES6, я бы ожидал их в окне Object, бит там не отображается.Магазин 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

Вы не можете просто «получить список» всех классов. Вам нужно сделать что-то страшное, например создать глобальный объект для хранения всех из них. – ndugger

+0

Вы можете попробовать начать с известного класса, например String, и воссоздать цепочку прототипов, пока не найдете другие классы. Возможно, они не все находятся в одном месте или все наследуют от одних и тех же вещей. –

+3

* «То, что я точно хочу, это список всех классов, которые расширяют мой класс» * Это невозможно. –

ответ

0

Вы можете использовать Class expressions, чтобы хранить их в каком-то массиве, хотя я, вероятно, не сделал бы этого, если бы был вами.

var Test = class Test { 
    constructor() { 

    } 
} 

allClasses.push(Test); 
+0

Не стоит отвечать, если это то, что вы не сделали бы. – ndugger

0

классы JavaScript введены в ECMAScript 6 и синтаксический сахар по сравнению с существующими на базе прототипа наследования в JavaScript. Синтаксис класса не представляет для JavaScript новую объектно-ориентированную модель наследования. Классы JavaScript обеспечивают гораздо более простой и понятный синтаксис для создания объектов и работы с наследованием.

В основном классы ES6 скомпилированы в простые старомодные функции Javascript. Вы можете «хранить» их у объекта окна, но это серьезная ошибка, поскольку вы убиваете весь взлом модуля ES6.

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), вы можете просто помнить t весь модуль, где бы вы ни нуждались:

// 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); 
Смежные вопросы