モダンな JavaScript

今まで JavaScript は手続き型っぽく「なんとなく」使っていたのだが、最近ではクラスが使えるようになったりとキャッチアップの必要がありそう。

まずは、クラス(class)を使ってみる。

クラス class

そうはいっても、初心者向け記事のようなやつはダルくて実用的ではないので、「あるクラス内に別のクラスを含んでいる場合」というやつを試す。

まず、html ファイルの準備。

<!DOCTYPE html>
<html lang="ja">
<head>
 <title>TODO supply a title</title>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <script src="./js/test.js"></script>
</head>
<body>
 <div>JS test</div>
</body>
</html>

test.js はこういうものにした。

test.js
class a{
 constructor(){
  console.log('instance of a');
  class b{
   constructor(){
    console.log('instance of b');
   }
  }
 new b;
 }
}
new a;

class a1{
 constructor(){
  console.log('instance of a1');
  new b1;
 }
}
class b1{
 constructor(){
  console.log('instance of b1');
 }
}
new a1;

適当なウェブサーバーに設置。
html を出力させると、コンソール表示は

instance of a
instance of b
instance of a1
instance of b1

となる。

ただ、これは、テスト的コード。

あるクラス(a)に別のクラス(b)を含めて使いたい場合、b は必ずしもあるとは限らない。

new b というのはダサい。セッター&ゲッターを使いたいところ。

・・

・・・・

・・・・・・

などと言っていたのだが、上のような例(nested class などという)は JavaScript 非対応らしい。

ちゃんちゃん。

 

 

JavaScript -連想配列と配列でオブジェクトを表現-

今日は Java ではなくて JavaScript の話。

初学者向けの JavaScript の記事、ヤバいのが多くないか?

この前の記事でモデル Phone のコレクション(リスト)を含む Person を永続化する REST api を作成したが、JavaScript で Person のオブジェクトを投げたい。

その際、配列と連想配列を用いて Person の実体を作成する必要があるんだが、配列と連想配列を組み合わせて使うという発想がないらしく、そのままでは動かないサンプルが散見された。

JavaScript は詳しくないが、おそらく「動く」コードは以下のような感じ。


var phone1 ={'number':'090-111-1111'};
var phone2 ={'number':'090-222-2222'};
var phones =[phone1,phone2];
var person = {'phones':phones};
var json_text = JSON.stringify(person);
console.log(json_text);//確認用
// {"phones":[{"number":"090-111-1111"},{"number":"090-111-1111"}]}

この処理をしてから、XMLHttpRequest などを使って REST api に POST する。
ちなみにちゃんと永続化できてた。

配列の宣言・初期化は [] 、連想配列の宣言・初期化は {} 、が基本だと思うのだが、おかしな記法や説明している記事が多かった。

思うに、オブジェクトを配列・連想配列を組み合わせて JSON で表現する、という実用的な使用方法を意識してないんだろうなあ。

スクリプト系言語の初学者向けの記事には気をつけた方がいいかな?