JSのプロトタイプの扱いについて思うこと
Twitterで垂れ流したのを適当にまとめる。
JSでライブラリ作るときは組み込み型のプロトタイプに触れないことがマナーになってるっぽい雰囲気あるけど、デファクトなライブラリがあったら明示して使っていいと思うんだけどなーってprototype.jsの死骸を眺めつつunderscore.jsのドキュメント読んでた
http://documentcloud.github.com/underscore/
まあ mapとかcollectとか、最新のV8やGeckoならサポートされてるわけで、IEのことを気にしだすとこういうライブラリに依存するんだろうが…
僕は prototype.js のように組み込みプロトタイプを拡張するの全然構わないと思ってる。のだけど、あくまで共通認識を得たそういうライブラリじゃないと受け入れられないわけで、underscore.js はその現代版を目指してるのかなといった印象。というか影響を受けているのはドキュメントに明記されてる。
まあ今更 selected = array[array.indexOf("hoge")] とか書きたくない気持ちはある。
でもまあ、_.each(array,function(){...}) とか正直書きづらいし、ArrayをeachするっていうOOP風の表記の方が自然だよな、って思う。forEachなぜこんな不自然な二文節になったし。
自分が知ってる限り、WebGL系のライブラリは結構好き放題拡張していた。、というか、3Dを扱う限りそこそこの速度で行列計算できないといけないわけで、JSのWebGLネックはそこにある。ネイティブで行列計算ライブラリを用意してくれないと、がっつり3Dゲームなんか作れない。
話がそれた。3Dゲームの話はいい。
まあ、prototype.jsの廃れたのは、プロトタイプどうこうとかじゃなくて、偏にjQueryと$の名前空間が被っていたというそれに尽きると思う。ちょっといじれば併用できるのは皆知ってるけど、DOM操作については役割が被っていたわけで、そして皆がやりたいのは簡易なDOM操作だった。そういうことだろう。
僕も昔JSでOOPしたくてprototype.js使っていたことがあるのだけど、今はCoffeeScriptが クラスと継承的なものを自然に記述できる記法を用意しているので、それでいいやといった感じ。
で、box2d-jsのコード読んでたらC++からのポーティングにclass化の用途でprototype.js使われて、やっぱりげんなりしたので、自分もprototype.jsのことは忘れたいのだと気づいた。
何が言いたかったって言うと、JSの素のArrayはクソすぎるのでエンドユーザーとしては好き放題いじり倒して使うのがいいだろ。長々書いていいたいのはそれだけ。