作者: T.Watanabe
日時: 2006/3/21(19:32)
  ねこ丸です。

藤岡和夫 wrote:

>  配列にオブジェクトを代入したような構造を作って、配列のなかの特定のオブ
> ジェクトにアクセスすることもできますね。
> 
>  連想配列とオブジェクトのプロパティが等価のように動くのがおもしろいとい
> えばおもしろい。配列がオブジェクトだから当然なんでしょうけど。

  そうなんですけど、値もメソッドも一緒くたってところは変わらないので、ど
うしたって不便なんですよね。ベタに書いてベタにアクセスするだけならいいん
ですけど、それだけじゃあ目的を達するまでのコードが長くなっちゃうんでそこ
は隠蔽したい。

  prototype.js で hash とか作ってはいるんですけど、組み込みの Object や
Array を拡張しちゃってるんで、うっかり for ( in ) を書けなくなってしまっ
ています。これは 2ch でも批判されてるんですが、僕もとりあえずこの書き方
で hash を作ってみたんですよ。するとやっぱり自分で for ( in ) を書い
ちゃってハマるんですね(^^;  なかなか難しい。直接値を持たせずに

  {
    this.obj = new Array();

    this.method = function() {
      for ( key in this.obj ) {
      }
    }
  }

  なんて感じで書くのがいいのかなぁ。操作は全部メソッド経由にしちゃう。[]
も for ( in ) も使えなくする。(中途半端に使える状態じゃなくてまったく使
えない状態にしちゃう。)直感的じゃなくなっちゃいますけど。
  あるいは逆に hash を操作する関数はグローバルな関数として書いちゃった方
がいいのかなぁ。なーんかね。面白いんですけど、使いにくいですね。ユーザー
定義のプロパティに DontEnum 属性をつけられれば一発で解決するんですが。

  こういうのも javascript 2.0 では解決するのかなぁ?

--
    ねこ丸