DeLLa.JS な日記 #4
7/5 にDeLLa.JS と Firefox3 の記念パーティーに参加してきた。
お菓子美味しかったです。(〃▽〃)
帰りに余ったコアラのマーチも貰っちゃったし、元取れた(ノ´∀`*)
しかも、お菓子の直ぐ隣の席だからお菓子食べ放題━━━━Σ(〃▽〃 )━━━━!!
で、
DeLLa.JS の勉強会はP138から、主にクロージャについてです。
Callオブジェクトがどうのこうのとか・・
ブレークポイントの例とかきもいよね。みたいな・・
そしてその後、ついに9章突入です。
はい、JavaScriptでクロージャと並んで最もきもいところですね。
その中でも特に議論されていたのが、コンストラクタの戻り値
(return で何かを返す場合、返した値(型)で動作が変わる。)
てか、自分がしつこくネタを振ってただけかも(〃 ̄ー ̄〃)
普通はコンストラクタでは return なんてしない!
だから気づかなかったが、JavaScriptはかなりきもい動作をする。
以下に例を示す。
// Hoge クラスはプリミティブ型(boolean)を返す。
function Hoge(x, y) {
this.x = x;
this.y = y;
// クラス名を設定
this.className = "Hoge";
// toString を上書き
this.toString = toString;
// コンストラクタだが、falseを返す。
return false;
}
Hoge.prototype.toString = toString;// Foo は Hoge のインスタンスを返す。
function Foo(x, y) {
this.x = x;
this.y = y;
// クラス名を設定
this.className = "Foo";
// toString を上書き
this.toString = toString;
// コンストラクタだが、Hogeのインスタンスを返す。
return new Hoge("くま?", "くまん?");
}// mixIn 用のtoString
function toString() {
return this.className + " { x : " + this.x + ", " + "y : " + this.y + " }";
}// インスタンス化
var hoge = new Hoge("X", "Y");
var foo = new Foo("XX", "YY");var BR = "\r\n";
// 表示してみる
alert([
"hoge : ", hoge,
// > Hoge { x : X, y : Y }
BR,
"foo : ", foo,
// > Hoge { x : くま?, y : くまん? }
BR,
"hoge instanceof Hoge ===> ",
hoge instanceof Hoge,
// > true
// new して、プリミティブ型の値を返した時は普通の動作。
BR,
"foo instanceof Foo ===> ",
foo instanceof Foo,
// > false
// Foo をnew したのに Foo じゃない!?
BR,
"foo instanceof Hoge ===> ",
foo instanceof Hoge,
// > true
// 実は Foo のインスタンスは Hoge だった!?
BR,
"Hoge() ===> ",
Hoge(),
// 関数として呼び出せば、false が帰ってくる。
].join(""));
つまり、コンストラクタの中で return するなと・・
return this なら大丈夫だけど。
そしてその後は、Firefox3の記念パーティー。
とまとん、ダウンロードイベントで貢献しちゃったもんねっ(*ノノ)
なんかやたらテンション高くて店員さんにクレーム貰ってる変なおっさんがいたけどきにしない・・・
奥さんも一緒に来てたけど、奥さん大変そうねぇとか思ったり思わなかったり。
そして、Firefox3のシールやらノートやらマグネットやら色々貰いました。
今日はもじら組の組長さんがわざわざ東京からきてた。
うん、組長っぽかった。
さらに、フォクすけのぬいぐるみ争奪戦。
まぁ、ただのじゃんけんだけど・・
残念ながらとまとんは手に入れることが出来なかったけど、同じ会社の同僚が一発で勝ち取ってた。
ありえないと思った。
20人くらいいたのに・・・
きっと来週からは毎日、社内でフォクすけぬいぐるみと対面することが出来るでしょう。
フォクすけキュン・・・(〃▽〃)
あれ・・・
フォクすけ!?
つД`)・゚・。・゚゚・*:.。..。.:*・゚