Kanasan.js CodeReading#4に行ってきた

随分日にちが経ってしまいましたが、先週末Kanasan.jsのCodeReading#4に行ってきました。
今回はやや参加人数が減少し合計11人でした。
年度末とあって、社会人は仕事が忙しかったり、学生は卒業論文・研究などに忙しいのでしょうか。


今回は前回から引き続きElementクラスの拡張メソッドを中心にCodeReadingを行いました。
私は途中で早退したのですが他の参加者のレポートを見てるとまだElementの終わりまで行ってないみたいですね。
それにしてもElement長すぎ。。。


内容の方はというとブラウザの表示の互換性をサポートする為のコードや、
DOM要素を便利に操作する為の拡張関数ばかりだったので理解はしやすかったです。


  • recursivelyCollect, previousSiblings, nextSiblings, siblings

 どういった時に利用するのかあまりピンとこなかったけど、
 実際にはCSSセレクタXPath経由で内部的にこれらが実行されてるのだろうか?

  • identify

 これはDOM要素のidを動的に振ってくれるというもの。わりと便利かも。
 idに使われているシーケンスはこの関数自体に保存しているところが面白い。
 グローバル変数ではなく、関数のプロパティとしてstaticな変数。

  identify: function(element) {
    element = $(element);
    var id = element.readAttribute('id'), self = arguments.callee;
    if (id) return id;
    do { id = 'anonymous_element_' + self.counter++ } while ($(id));
    element.writeAttribute('id', id);
    return id;
  }

  Element.Methods.identify.counter = 1;

 identifyされているのにanonymous(匿名)というのも変な感じだけど。

  • readAttribute

 属性名に:が含まれているのはxml:lang等の属性名の時、
 ブラウザ毎に違う挙動をする可能性があるからだろうということらしい。
 属性名に:(コロン)が使える事を初めて知った。

  • hasClassName, removeClassName

 RegExpオブジェクトのtestはStringのmatchと同義。
 L.278に

RegExp.prototype.match = RegExp.prototype.test;

 という記述があり一瞬、会場が騒然としたがJavaScriptRegExpには
 元々matchがないので問題無し。
 Stringではmatchを使って RegExpではtestを使うってのも
 違和感のある仕様だけど、歴史的な経緯でもあるのかな?

  • toggleClassName

 内部でaddClassNameとremoveClassNameを使い分けていて、
 要素にclassを付けたり取り除いたりするのだけど、
 クラス名はトグルするより切り替える方が自然じゃないの?という意見も。
 確かにマウスオーバーで画像のON, OFFを切り替えたりする場合は
 class="image_on", class="image_off"のように変更したり、
 活性、不活性を切り替えたりする場合はclass="active", class="inactive"
 とした方がセマンティクスとしては正しい気がする。
 その場合は関数名はtoggleClassNameではなくcycleClassName
 というのが解りやすいかも。


めぼしいところはこんなもんかな。
そういえば今回は読み方の解らない関数名がたくさん出てきたが、
その度にMacの単語を読み上げてくれる機能が何度も何度も活躍してました。
よりMacが欲しくなりました(笑


今回も忙しいなか主催のKanasan, ujihisaさんありがとうございました。
参加されたみなさんもお疲れ様でした。