Object.prototypeの汚染についてぐだぐだと言ってみる。
2007-05-26


JSONがらみで検索してつらつらとながめてたら、割と「json.js」への風当たりがきついみたいだ。やはりどうも「Object.prototype.toJSONString」が評判悪い。

んー確かにすべてのオブジェクトが汚染されるし、

"aaa".toJSONString()
なんかまったく意味ないから関数かなんかで提供されてても問題ないよなあとは思う。

あと、Google MAP APIとかとぶつかったりするんじゃ確かに頭にくるかもなぁ。併用するライブラリと相性悪いとか。

でもね、

以下、個人的な感想、というか考え方。

prototype汚染で何が困るって話で、「for...inループで余計なものまで列挙されてイヤ」ってのをちらほら目に(耳に?)するけど、そんなにしょっちゅうfor...inでプロパティ列挙する必要があるものだろうか。

dara-jは、自分で設計/実装したオブジェクトを使っている限り「メソッドの列挙」が必要な局面ってあまりない気がする。非Functionなメンバの列挙だったら、prototype.jsで$H()使うか、

for(var prop in myObj ) {
        if( typeof( prop ) == "function" ) continue;
        // 〜列挙してなんかする
}
で除外しちゃう。大部分はこれで事足りるし、困らないような気がするんだけど。

for...inでメンバ列挙してなんか処理するって、シリアライズ用途以外ではリフレクション的な使い方になると思うんだけど、これって結構トリッキーじゃなかろうか。

目的の処理を実装するのに必須ではないっていうか、他に設計方法があるんじゃなかろうかと。

まぁそのトリッキーっぷりがJSらしいっちゃらしいんだけど。無節操に組み込みオブジェクトを拡張できちゃうのもJSらしいのでは。

[JavaScript]
[雑記]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット