2016-03-28 14 views
3

Javascriptでは、モジュールからエクスポートされていないオブジェクトをインポートする方法はありますか?JavaScriptで明示的にエクスポートされていないものをインポートする

これはおそらく悪い習慣であることを認識していますが、それでも可能かどうかは疑問です。私はPythonの背景を持っているので、私はモジュールをインポートすることができますが、JavaScriptのデータ要素すべてにアクセスすることはできないという考えには戸惑います。

+1

でも、Pythonにはプライベート変数がありますか? – Bergi

+0

はい、しかし、実際に私的ではありません。(http://stackoverflow.com/questions/70528/why-are-pythons-private-methods-not-actually-private) –

+0

私は[actual variables] //sackoverflow.com/questions/291978/short-description-of-python-scoping-rules)、メンバではありません(属性やメソッドなど)。それらはプライベートではありませんか? – Bergi

答えて

4

モジュールAPIを使用していません。モジュールはオブジェクトをエクスポートし、モジュールをインポートするコードにはそのオブジェクトへの参照が与えられます(JSの意味では "reference")。

セクション15.2.3 of the specは、エクスポートをカバーし、非常に冗長に、exportキーワードがモジュールのインポート/エクスポートテーブルにローカル変数を含めることを示しています。まったく単純に、exportを指定しないと、変数はモジュールスコープに対してローカルになります。

これは、関数スコープを使用してローカル変数を非表示にし、オブジェクトを公開して公開する従来のIIFEモジュールの動作と一致します。

アンES6モジュールのような:JSモジュール(でもthe fantastic 2ality module writeup)が未エクスポートに何が起こるか言及していない上

(function() { 
    function Foo() { 
    ... 
    } 
    var bar = new Foo(); 
    return { 
    Foo: Foo, 
    bar: bar 
    }; 
})(); 

ほとんどの記事:次のようになりますtranspiledされた後

export class Foo { 
    ... 
} 

export const bar = new Foo(); 

変数。

the CommonJS module standardは、モジュールには変数exportsがあり、「モジュールはそのAPIを実行時に追加する可能性があります」と記載しています。

モジュールがエクスポートする唯一の手段として、「輸出」オブジェクトを使用する必要があります。CommonJSの標準は、私がこれまでに(モジュールのコンテキスト2.1から)キーワード/オブジェクトを経由して輸出しのみに見つけた唯一の参照を持っています。

関連する問題