1 月 28 2007

Prototpye.jsのEnumarableを読む

Published by haga at 14:56 under actionscript2.0, javascript, programing

Prototype.jsのEnumarableをAS2に移植中。 あ、あとObject.extendも ObjectUtil.mixin() みたいな感じで移植したんだが、これは使えるなぁ。

JavaScriptみたいにクラスに関数を追加していくのには、ちょっと使いづらいが(コンパイルエラーとかで)、極力1行で書きたいときに重宝する。

throw ObjectUtil.mixin( new Error, {name:'Hoge'} );


みたく書けば、新しいErrorを作りながら、プロパティも代入してから返せるね。2行書かなくて済むね。それだけだけどね。

で、Enumarableの中身をじっくり読むと、ここだけでも随分トリッキー。Errorじゃないものをthrowしてたり、おじさんには意味がわからない。tryステートメントを入れ子にしてたり・・複雑だなぁ。

で、今日また勉強したのがEnumarable.anyの判定式

if (result = !!(iterator || Prototype.K)(value, index)) throw $break;


はい?なんだって?

まず「throw $break」は、 var $break = new Object(); というのが上の方に書いてあって、_eachの中でtry~catchする用なんだが、

if文の中で代入作業をしていいなんて知らなかった。

「!!」は多分、否定2回だから、対象を強引にブーリアン型に変換しているものと思われる。多分Boolean( ~ )でもいいのではないかと。「!!」の方がクールだな。

(iterator || Prototype.K)(value, index)


はどちらも関数で、引数として渡されたiteratorが何かリターンする関数じゃなかった場合、Prototype.Kという関数を使うらしい。その場合valueをそのまま返す。

これが1行。勉強になります。

Prototype.jsのソースは本当に勉強になる、というお話。

Trackback URI | Comments RSS

Leave a Reply