2016-04-05 3 views
-1

宣言されたES6クラスへの参照がどこに格納されているかわかりません。ウィンドウオブジェクトでそれらが期待されていましたが、そこには表示されません。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とします)モジュール全体を必要に応じて使用してください:

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