20150823 - kyosen/javascript-ninja GitHub Wiki

第6章 プロトタイプによるオブジェクト指向

6.2 落とし穴に注意!

  • P.163 の「リスト6-19」で、new 演算子なしで呼び出された場合、new 演算子付きで呼びなおしているが、エラーで落とした方がよいのでは?(伊藤)
    • 落とすことができない?
    • 例外をスローとかできるのでは?
  • callee は今後のバージョンで廃止予定であり非推奨と書かれているが、代替の方法はあるのか?(伊藤)

6.3 クラスに似たコードを書く

  • Backbone.js で super のようなメソッドはあるか?(矢野)

    Brief aside on super: JavaScript does not provide a simple way to call super — the function of the same name defined higher on the prototype chain. If you override a core function like set, or save, and you want to invoke the parent object's implementation, you'll have to explicitly call it, along these lines:

    var Note = Backbone.Model.extend({
      set: function(attributes, options) {
        Backbone.Model.prototype.set.apply(this, arguments);
        ...
      }
    });
    

    http://backbonejs.org/#Model-extend

6.4 まとめ

第7章 正規表現

7.1 正規表現のエレガンス

7.2 正規表現の概要

  • P.180 表7-1 で \b が多重定義されているが、コンテキストで判断されるのか?(井谷)
  • 他の言語だと ^$ は行頭、行末で、文字列の先頭、最後は \A\z と定義されていることがあるが、JavaScript では区別はないのか?(伊藤)
    • 複数行フラグ(m)が設定されていると、行頭にもマッチする。(矢野)

7.3 正規表現のコンパイル

7.4 マッチした部分をキャプチャする

7.5 置換関数を使う

  • g フラグの有無で、全部置換か1件置換が変わる(Java の replaceAllreplaceFirst)という理解でよい?(伊藤)
    • よい。
    • Java の正規表現にフラグはあったか?(矢野)
      • Pattern.compile の引数にフラグを渡せる。大文字・小文字を区別しない等が可能。
  • P.192 リスト7-10 のコードで replace を使っているが、かえって分かりづらくなっていないか? for each で書いた方がよい。(矢野)

7.6 一般的な諸問題を正規表現で解決する

  • P.195 の リスト7-12 で \s+\s\s* にあえて書き換える意味があるのか?(伊藤)
    • 元の記事を読むと、いちおう計測した結果らしい。(矢野)
  • P.197 「受動的な部分式」とは?(伊藤)
    • (?:...) のように記述し、キャプチャ結果に追加したくないときに使う記法。7.4.4 で既出。(矢野)
    • Java では「前方参照を行わない正規表現グループ」と言うらしい。(伊藤)
    • 「前方参照」か「後方参照」か?
      • この本の原文では refer back to... と書かれている。(井谷)
    • passive も「受動的」というよりは「参加しない」「活動的でない」という意味では。

7.7 まとめ