JavaScriptはオブジェクト指向言語といえるのか?

JavaScriptオブジェクト指向言語といえるのか?自分は例の本を読んでいる間,そんなことばかり考えていました.ほとんど禅問答の世界.オブジェクトとは何ぞや?みたいな.答えがあるようなないような,かなり非生産的かもしれない(そうでないかもしれない)時間を費やしてしまいました.
JavaScriptオブジェクト指向言語と考えると弊害が多いので止めたほうがよいのではないか,というのが現在の自分の結論です。これは悪い意味では全くないのだけど,C++/Java/C#といったクラスベースのオブジェクト指向言語に慣れた人たちは,どうしてもそういったパラダイムで考える習慣がついているので,かえって習得を困難にする可能性があるんじゃないかというのが理由です.
JavaScript言語におけるオブジェクトとは,連想配列として表されるKeyとValueの組み合わせの集合です.KeyとValueの組をプロパティといいます.……たぶんここまでの説明を聞いた時点で,ではメソッドはどうやって定義するの?という思考パターンに入ってしまうと思うんですよね.自分が完全にそのタイプでした.でもそのときからクラスベースオブジェクト指向の差異(呪縛)に悩むことになります.継承はその最たるものでしょう.
いっそオブジェクト指向から離れて枠組みを再構築する,というアプローチのほうが上手くいくんじゃないか.脱オブジェクト指向,みたいな.そうすればブラウザ非互換な__proto__オブジェクトなんてものに悩む必要はなくなるんじゃないだろうか,なんてことを考えています.


それにしても,JavaScriptは本当に面白い.Callオブジェクトとスコープチェーン,関数オブジェクトとFunctionオブジェクト,prototypeオブジェクトと__proto__オブジェクト,そしてClosure.美しさといいかげんさが同居したような言語仕様は好き嫌いが分かれそうですけど,理解できた!と思った瞬間にそれをあざ笑うかのように思考の網をすり抜けていくところは痛快で知的好奇心をくすぐります.


ところでJavaScript 2.0では,classやextendsといったキーワードが追加されるようです(詳細は全く知らないのでデタラメかも).これはこれで嬉しいような,つまらないような.現在の混沌とした状況を改善してくれそうではあるけれど,ありきたりな言語仕様になるとしたら残念かもしれません.