55343


いつもお世話になっています。  
下記の質問についてご存知の方がいらっしゃいましたらご教示を願います。

* * *

### 【質問の主旨】

【質問の補足】で記述したindex.htmlを表示させてコンソール画面を確認すると`Uncaught SyntaxError: Unexpected
token { class_private.js:4` という文法エラーが表示されます。  
エラーを表示させないためには、`class_private.js`のどこを修正すれば良いでしょうか？

### 【質問の補足】

1\. index.hmtl

[code]

    <!DOCTYPE html>
    <html lang="ja">
    <head>
      <meta charset="utf-8">
      <title>オブジェクト指向構文</title>
    </head>
    <body>
      <h1>オブジェクト指向構文</h1>
      <script src="scripts/class_private.js"></script>
    </body>
    </html>
    
[/code]

2\. class_private_lib.js

[code]

    'use strict';
    
    {
        const NAME = Symbol();
        const BIRTH = Symbol();
    
        export class Person {
            constructor (name, birth) {
                this[NAME] = name;
                this[BIRTH] = birth;
            }
        }
    
        getName() {
            return this[NAME];
        }
    
        getBirth() {
            return this[BIRTH];
        }
    
    }
    
[/code]

3\. class_private.js

[code]

    'use strict';
    
    {
        import { Person } from './class_private_lib.js';
    
        let p = new Person('Taro Yamada', '2000/10/12');
    
        console.log(p.getName());
        console.log(p.getBirth());
    }
    
[/code]

4\.

上記の3つのファイルは「JavaScript逆引きレシピ 第2版」のP240に掲載されている「147
外部からアクセスできないプロパティ/メソッドを定義したい」を参考にしています。  
<https://www.shoeisha.co.jp/book/detail/9784798157573>

* * *

以上、ご確認よろしくお願い申し上げます。


CC BY-SA 4.0
2019-05-29T07:24:04.683
55339
2019-05-29T09:46:28.043
32232
question
javascript
'import { Person } from './class_private_lib.js';'の文法エラーを教えてください。


  1. `import` 文や `export` 文はファイルのトップレベル（一番外側）でのみ使うことができます。ご提示の例のように`{ }`で囲んだブロックの中で使うことはできません。`import`文や`export`文は`{ }`の外側に出す必要があります。

  2. `import`文や`export`文を使用できるのは「モジュール」扱いで読み込まれたJavaScriptファイルの中だけです。JSファイルをモジュール扱いで読み込むには、`index.html`内の`script`要素に`type="module"`属性を追加します。
[code]     <script type="module" src="scripts/class_private.js"></script>

    
[/code]

* * *

ただ、以上の点を修正しても`class_private_lib.js`が変なようです（`getName`や`getBirth`の定義が`class`の外に出ていて文法的に正しくない）。書籍の内容は確認できていませんが、目的を達成するには別の工夫が必要かもしれません。


CC BY-SA 4.0
2019-05-29T08:56:00.427
55343
2019-05-29T09:46:28.043
2019-05-29T09:46:28.043
30079
30079
55339
answer