排便をして休憩。息抜きに wget でファイル蒐集。ダウンロード時間中に麻雀の練習。

1:00 自習に戻る。

  • Native prototypes
    • これらを上書きすることができる。しかしグローバルなものなので、それは悪い考えのはずだ。
    • やはり多重継承は不能のようだ。
    • 演習問題 2 は最初は (a, b) で試す。それから一般の引数リストを対応する。 そして、解答にあるオブジェクトメソッドに作用させる方法にクセがあることに注意。
  • Prototype methods, objects without proto
    • __proto__ は時代遅れ。当世風の記法がある。
    • 序盤のコード例は数章前のそれを書き改めたものだ。
    • Object.create(null){} とは違う。
    • 演習問題 1 は Object.defineProperty() のほうがコード埋め問題の解としてはいいと思う。 後付けの場合 Object.setPropertyOf()enumerable を指定できないからダメか?

2:20 クラスの直前で止めておく。あとは YouTube を観る。

3:00 消灯。

6:00 起床。洗濯。納豆とおにぎりを食う。PC を開く。

  • Class basic syntax
    • クラスからオブジェクトを生成するときに new を欠くことはできない。
    • クラスフィールドという概念がある。オブジェクトごとに割り当てられる。
    • WebGL のコードを書くと、演習問題とよく似た状況になりがちがった。 とにかくタイマー系関数の引数に this が現れそうなときは注意する。 矢印関数記法か this.callback.bind(this) 呼び出しを採用するのが正解だ。

6:50 洗濯物を干す。

  • Class inheritance
    • extends の後にはクラス名が来る必要はない。
    • タイマー系関数に super が現れそうなときは注意する。さっきと同じ。
    • 派生クラスのコンストラクターでは super を呼び出す必要がある。
    • クラスフィールドの初期化は super の後のため、上書きされていない時間帯が生じることがある。
    • 演習問題 1 はコードをブラウザーで実行すると、デバッガーがエラーメッセージで解答を教えてくれる。
  • Static properties and methods: 問題ないはず。

8:05 PC を閉じて外出。押上駅~蔵前駅で大江戸線に乗り換える。新宿方面へ。

9:10 新江古田駅で下車。地上に出る。目白通りらしいのだが、この風景は見たことがない。 とりあえず南北方向にあるバス通りを南下する。全然見覚えがない。土曜午前ということで人気がない。 新青梅街道に出るとようやく見覚えのある公園が現れる。バスの営業所の方へ進むと小川がある。 ここで観念して Google Map をチェック。目的地は少し北西にある。

10:20 中野区江古田図書館。ここは記憶にけっこう残っている図書館だ。古い建物を覚えている傾向がある。 とりあえず雑誌コーナーに行く。週刊東洋経済と月刊散歩の達人をチェック。 都電荒川線特集は参考になる。いつもついている地図もありがたい。

館内を見回る。異状なし。あとは外観の写真を撮影して去る。 一度銭湯に行くときに通った道路はもっと東側だったか。見覚えのない住宅地を北上する。 目白通りに戻ってコンビニで道草などをしながら新江古田駅に戻る。

大江戸線と浅草線で押上駅まで戻る。土曜なのに制服を着た生徒が何人も街を歩いている。

イトーヨーカドー曳舟店。体温チェック。

11:45 曳舟の部屋。PC をやる。写真整理。 縮小率を間違えてせっかく撮影した画像がひどいことになる。

12:00 おやつ。Twitter に投稿スケジュールを仕込む。

12:25 歯を磨いて締める。

  • Private and protected properties and methods
    • 導入部分の記述が優れている。
    • get/set の弱点は、引数リストが完全固定であるということか?
    • よその言語で言う private は # で指定する。 試したところ、これにアクセスするコードは実行時エラーというより、構文エラーになる。
  • Extending built-in classes
    • 最初の例は興味深い。知る限り他の言語ではない挙動だ。
    • 組み込み型同士では静的メソッドは継承されない。ユーザー定義型同士とは異なる。
  • Class checking: “instanceof”: 演算子 instanceof はオペランドに対して infix 形式で作用させる。
    • クラスのほとんどは、ここで紹介されている Symbol.hasInstance がない。
    • toString に関する記述はこの章にあることを覚えておく。
  • Mixins: 多重継承的なことを実現したければ、プロパティーをマージすればよい。

13:55 寝る。

20:45 起床。外出。

コモディイイダ東向島店。弁当も惣菜も売り切れているので退店。

21:30 ビッグエー墨田業平店。725 円。

  • 鶏照り焼きそぼろご飯
  • おにぎりセット鮭・鶏五目
  • 木綿豆腐 (2)
  • カレーヌードル (2)
  • コッペパンいちごジャム
  • コッペパンブルーベリー

曳舟の部屋。排便失敗。シャワーを浴びる。

22:20 風呂から出る。PC を開く。晩飯。

  • 【ドルチェさんとのコラボ企画】☆12ランセレして全一-50点以内を出し続けるチャレンジ! / beatmania IIDX29 CastHour / DOLCE. & MIKAMO [#IIDX] - YouTube: 敵討ちに加えて残機回復がシステムに組み込まれた。
  • Error handling, “try…catch”:
    • まずは catch させる・されたオブジェクトの属性を覚えておく必要がある。 組み込み例外の主要なものを覚える。
    • 例外処理の意義自体は他言語と変わらない。
    • 環境依存の global catch 機能。ブラウザーならば window.onerror() というのがあるだろう。
    • この記事では finally 節で例外を送出するケースについて述べられていない。何か欲しい。
  • Custom errors, extending Error
    • Error のコンストラクターは message しか受け付けないので、サブクラスで this.name を上書きする。
    • 本文のクラスを図式化するとこういう感じになる。なお MyError は省いた。

      classDiagram
          direction TB
          
          Error <|-- ValidationError
          Error <|-- SyntaxError
          ValidationError <|-- PropertyRequiredError
          Error <|-- ReadError
          SyntaxError <--o ReadError : cause
          
          class Error{
              +string message
              +string name
          }
          
          class PropertyRequiredError{
              +string property
          }
          
          class ReadError{
          }
      
  • Introduction: callbacks
    • 最初の loadScript() は常識らしい。
    • script.onloadscript.onerror をセットで覚える。
    • コールバックベース非同期処理の問題点を理解すること。