20150823 - kyosen/javascript-ninja GitHub Wiki
第6章 プロトタイプによるオブジェクト指向
6.2 落とし穴に注意!
- P.163 の「リスト6-19」で、
new
演算子なしで呼び出された場合、new
演算子付きで呼びなおしているが、エラーで落とした方がよいのでは?(伊藤)- 落とすことができない?
- 例外をスローとかできるのでは?
callee
は今後のバージョンで廃止予定であり非推奨と書かれているが、代替の方法はあるのか?(伊藤)this instanceof arguments.callee
の代わりにthis instanceof User
と書けばよい。- 一般的な解決法としては、
callee
を使う代わりに、関数に名前をつける。(矢野)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Strict_mode
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); ... } });
6.4 まとめ
第7章 正規表現
7.1 正規表現のエレガンス
7.2 正規表現の概要
- P.180 表7-1 で
\b
が多重定義されているが、コンテキストで判断されるのか?(井谷)- 訳注にある通り。
[\b]
の場合はバックスペースと解釈される。(伊藤)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions- バックスペースって何?(米田)
- Unix 端末で下線を引きたいときに
a\b_
のように使われた。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12100677317
- Unix 端末で下線を引きたいときに
- 他の言語だと
^
、$
は行頭、行末で、文字列の先頭、最後は\A
、\z
と定義されていることがあるが、JavaScript では区別はないのか?(伊藤)- 複数行フラグ(
m
)が設定されていると、行頭にもマッチする。(矢野)
- 複数行フラグ(
7.3 正規表現のコンパイル
7.4 マッチした部分をキャプチャする
7.5 置換関数を使う
g
フラグの有無で、全部置換か1件置換が変わる(Java のreplaceAll
とreplaceFirst
)という理解でよい?(伊藤)- よい。
- 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 も「受動的」というよりは「参加しない」「活動的でない」という意味では。