今回は内容が内容だけに、割と質問数が少なくて黙々と読んでた印象。
9時スタートだったのだけど、大阪駅やら会場周辺やらで迷ったのもあって到着は1時間半ほど遅刻でした。
電車で読みながら移動してたのもあって、問題無く参加出来たけど、遅刻していくと準備とか手伝えなくてマズいなぁ(n'ω'`)
演算子の挙動とかと違って、この辺は書いてある事を理解すればそれで終わりって感じだったのであまり質問が出なかった。
なので読みながらメモった事を主に書いとく。
・JavaScriptにおけるclassとは
サイ本の範囲の仕様上はclassという文字は使われない(2.0からclassをサポート
・誤植や誤字の正誤表はないのか?
サイトには記載がない
O'Reilly Japan --正誤表リスト--
ってページはあるけど、書籍一覧は404です。
・インスタンスメソッドからのインスタンスプロパティの呼び出しは必ずthisを通す。
スコープチェーンには追加されていないのね。
なんかphpみたい。
・インスタンスメソッドという呼称は
newされたインスタンスに直接関連付けられたものも、コンストラクタで設定されたものも、プロトタイプで設定されたものも全て含む呼称?
nanto先生の回答
元々classの概念があるわけではないのでインスタンスメソッドって呼び方もそもそも借り物。
だからjavaのclassに相当するものとして考えた場合、この呼び方でまとめて妥当なんじゃないでしょうか
って感じの答えが帰ってきた気がす。
実際に説明する時はプロトタイプメソッドとかって言った方がわかりやすそうだ。
・コンストラクタチェーンは明示的に呼び出す(P170
C++みたいにクラス側で呼んでくれるわけではないし、javaのようにsuperで呼び出したりもしない。
・プロトタイプの継承
親のインスタンスをそのままプロトタイプとして突っ込む、
プロパティまで継承されると困るので、わざわざdeleteを呼び出す、
最後にコンストラクタプロパティに元のコンストラクタを入れなおす。
面倒すぎるぞこれ(;´Д`)
・javaのようにsuperクラスを呼び出す方法の解説(ただし1階層)
これ配列にしてpushしていけばいいんじゃね?
>永続的に再帰的に呼び出される問題が!
自身のコンストラクタをまず探してから実行とか?
クロージャ使ってコンストラクタチェーンの多重問題は解決できないのか?
この辺はまた別エントリで考えてみよう。
他にもスーパークラスを使う例としてはメソッド内での親クラスのメソッド呼び出しというのもある
・P170下部親クラスのインスタンスをnewしてるのは?
コピーじゃだめなのか?
>敬称元のプロトタイプの変更も反映する必要がある
>つまりスコープチェーンで辿れないといけない
プロトタイプに親クラスのインスタンスをnewして代入するってのが凄い違和感があったんですが、実際にプロトタイプのチェーンを図にして考えてみると分かりやすいんじゃないかって話が。
実際に現場でノートに図書いてみたら理解しやすかった。
解説としては分かりやすい図が以下のサイトにありました。
いげ太のブログ: [JavaScript] 図解で簡単プロトタイプチェーン
全てのプロトタイプメソッドの走査処理の中で、Objectオブジェクトのプロトタイプに到達するまでは走査が続けられる?
(ってか上のページの図だとプロトタイプがnullの時点で止まるのかな?
・試しにプロトタイプをnullにしてみたらobjectのメソッドは参照出来ない?
function Test(){};t = new Test();
Test.prototype = null;
t.toSource();
これちゃんと結果返ってくる。
って事は、Objectのメソッドへの参照はprototypeとは別な所使ってるって事か?
function Test(){};これちゃんと結果返ってくる???t = new Test();
Object.prototype.test = function(){ alert('test') };
Test.prototype = null;
t.test();
いかんせんこの辺の動作はリファレンス見てもイミフなのでECMAの仕様書と睨めっこしてみた。
でコンストラクタの項を見たら理由が分かったんだけど。
13.2.2 [[Construct]]
Result(3) がオブジェクトでなければ、Result(1) の [[Prototype]] プロパティを、セクション 15.2.3.1 で述べるオリジナルの Object prototype オブジェクトに設定する。
というのがあって、このResult(3)ってのはprototypeプロパティにセットされてる値の事。
つまりプリミティブ型のデータやらnull値みたいなのが入ってたらObject prototypeオブジェクトをプロトタイププロパティにセットするって感じか。
ちなみにObject prototypeオブジェクトのprototypeプロパティはnullらしい。
(文的に非常にややこしいな( ´-`)
・toStringは組み込み系か否かの判断に使える
ObjectのtoStringがこのような機能を実装しているのであって、objectの継承先の組み込みクラスがオーバーライドしているのではない。
・ダックタイピング
instanceofとかでは見れないが、動作上はそのクラスのインスタンスとして動かせられる
jQueryのコードリーディングで度々目にする。
・プロトタイプベースの言語を参考にしている
他にプロトタイプベースの言語って何があんの?
「self」とか「io」
参考にしてるわけでは無さそう。
・ECMAScriptとJavaScriptとActionScriptの話
>ECMA4=js2.0=as3
・JSANの知名度
どれだけ使われてるのか?
GMの方が多いんじゃね?
p191
・未定義のグローバルオブジェクトの参照と、定義後に初期化していない状態での参照
例外を投げる場合に注目
・193-4の切れ方が読みずれぇえええええええ
・195のトップにjQueryやらでいつも見る名前空間の区切りが。
・モジュールは代入した時の事考えてアクセサ用意しとけという話。
・JSANにはシンボルのインポート用の関数があって、いろいろやってるって話
・198 匿名関数でくくるのはクロージャによるプライベートなプロパティ定義にも役立つ
・正規表現
「.」って「\n」を含まない文字クラスなのね。
文字クラスの一種だという認識がなかった
・バックスペース文字ってなんぞ?
正直いまだに分かってない。
・非貪欲 の使い道
(マッチするかどうかの判定だけの時は軽いのか?
・部分表現を内部で使う
ただし文字クラス上では使えない。
・単語境界
日本語の場合は?
ちゃんと境界判断されるの?
・アンカー予習したい
・貪欲/非貪欲とグローバルモードについて
>最長一致と最短一致を
>貪欲な繰り返しと非貪欲な繰り返しという言葉で表現しているね
以上。
会場では何故か無線が繋がらなくて、切ない感じでした。
Lingrのログ見たらなんか楽しそうで、悔しいのぅ、悔しいのぅ。
ってか、Lingrのログで会場で話されてない話題とかもあって泣いた。
「instanceof Object」がfalseになる例の話題とか面白いね。(今回の範囲と違うけど)
後、途中で入ったpm11opさんのLT。
JSON Editorについて
http://jsoneditor.net/
>普通お出かけしたらjsonいじりますよね
>[訂正]JSON Editor は十中八九 javascript でできています
m(ixi)n ミックシィーン
コメントする