読者です 読者をやめる 読者になる 読者になる

すがブロ

sugamasaoのhatenablogだよ

若手IT勉強会に行ってきたよ

JavaScript イベント

第11回でした

前回に引き続き jQuery 1.3.2 のソースコードリーティング。たぶん、コードリーディングの内容自体は、学のある人がまとめてくれると思いますので、もうちょっと別の視点で。
ちなみに、リーディング対象は bind メソッド。一応、bind メソッドについて一通り読み切った感じになりますね。次回は unbind あたりをまず読みに掛かると思います。

若手IT勉強会の参加に当たり

次回参加してみたい、という方の為にリソースを。

jQuery を読んで発見した事

よく見るイディオム

例えば jQuery 1.3.2 の 2480 行目あたり

var namespaces = type.split(".");
type = namespaces.shift();
handler.type = namespaces.slice().sort().join(".");

これ、split している時点で配列である事が明白であるにも関わらず、3行目で slice() しているんですよね。
slice で配列に対して slice() すると同じ配列が返ってくるので、何か深い意味があるのか? とちょっと話題沸騰したのだけど、気が付いてみれば簡単な事だった。
slice() の次に実行している sort() メソッドは破壊的メソッドなので、 namespaces.sort() としてしまうと、元の配列を破壊してしまう。しかし、 slice() をする事で新しい配列を生成して、その配列に対して sort を掛けて、元の配列に対して影響が出ないようにしているんですね。
なお、Ruby なら sort と sort! で使い分けれるとかドヤ顔で言うと袋だたきに遭う事は容易に想像できるため何も言わなかった。

あとは

なんかこの正規表現怪しくね? というところを jQueryTrac で確認したら、本当にバグとして上がっていた(#5138 (Namespaced events sometimes get triggered when the *beginning* of the namespace matches) – jQuery Core - Bug Tracker)事などがありましたね。

収穫

その他のこと

次回からの参加表明

参加表明が ATND になりました! ATNDによる集客力は結構あると思うので、早めに参加表明したいとあぶないかもしれませんね><

Twitter の ハッシュタグ

#wakateit でつぶやいてます! ご意見・ご感想があればタグを付けておくと、誰かが捕捉するかもしれません。

というわけで

次回もよろしくおねがいしましあ!

*1:合コン的な意味で