2017-11-22 24 views
0

用語が混在している可能性がありますが、グローバルコンテキストに同じ方法でwindowでアクセスできます。インポートしたモジュールの現在のコンテキストにアクセスしたいと思います。ES6でインポートされたモジュールのコンテキストにアクセスする方法は?

、私がやっているの簡単な例を与える私たちは、ファイルを持って想像するのは、次の2つのクラスが含まれているMyClasses.js呼ば:

export class MyClass1 {} 
export class MyClass2 {} 

その後、我々はmain.js

というファイルにクラスを言っインポートします
import {MyClass1, MyClass2} from './MyClasses' 

main.js私はいくつかのプロパティ値に基づいて各クラスの新しいインスタンスを構築するかもしれません。

function main() 
{ 
    const config = { case1: 'MyClass1', case2: 'MyClass2', case3: 'MyClass1' }; 

    const myPropValue = 'case3'; 
    const constructorName = config[myPropValue]; 
    const myClass = new context[constructorName](); // MyClass1 
} 

これは基本的な例であるが、そのようなクラスを構築するための多くのクラスと例がある状況で、私は関係をマッピングするのではなく、複雑な場合/ elseロジックに依存したいと思います。

一つの解決策は... windowコンテキストに

window.MyClass1 = MyClass1; 
window.MyClass2 = MyClass2; 

をインポートされたクラスを添付...、そこから私のクラスのインスタンスを構築するために、次のようになります。

const myClass = new window[constructorName](); // valid construction 

しかし、私は思いますこれらをグローバルスコープにバインドしないようにします。インポートされたモジュールのデフォルトのコンテキストはありますか、または自分でコンテキストを設定する必要はありますか?

+0

代わりにそこに(文字列として)名前を入れるのは、なぜ単にクラス(コンストラクタ関数)自体を検索しませんか? 'config = {case1:MyClass1、case2:MyClass2、case3:MyClass1}' – Bergi

+0

@Bergiはい、これは良い解決策です。なぜ私はこのことを考えなかったのか分かりません – sookie

答えて

2

ちょうどあなたのインポートを変更し、[OK]を次のようになります。

import * as MyClasses from './MyClasses'; 
+1

これは "コンテキスト"と呼ばれるのではなく、*モジュールの名前空間オブジェクト*です。 – Bergi

関連する問題