10年間JavaScriptをコピペしていた僕がJavaScript本格入門して知った驚愕のJavaScript言語仕様覚書

  • このエントリーをはてなブックマークに追加

JavaScriptをなめていた私が勉強しなおした結果、色々驚愕の事実が発覚したお話。JavaScriptをご存じの方には当然の内容かもしれません。

むかしむかし

私にとってJavaScriptといえば、高校生時代(10年ぐらい前…)にブログアフィリエイトをするために、当時流行っていたホバーウィンドウで広告を目立たせるなどといった浅はかな用途に、何処かからコードをコピペしてくるシロモノでした。

というわけでJavaScriptといえば「コピペすれば使える」「プログラマじゃなくても使える簡易的な言語」「広告を表示するために利用される鬱陶しい奴」というイメージが正直な所でした。

進化し、利用シーンが広がり、エンジニアとして無視できなくなりつつあるJavaScript

しかしながらその10年前から現在までに、広告や無駄な装飾に多用され有益な使い方と言えばアクセス解析かな、的印象だったJavaScriptは、ひょっとするとあの頃からJavaScriptが一番目ざましく進化したんじゃないかと思うぐらい、WEB業界の中心で発展を遂げてきたように思われます。

HTML5とスマートフォンの登場でWEB製作には欠かせない存在となり、さらにフロントエンドにとどまらずコマンドラインやサーバーサイドまでカバーしてWEB業界の中心あるいはIT業界の中心にいらっしゃるJavaScript様をそろそろきちんと勉強しなければ、と思っていたところへ、ちょうど仕事でJavaScriptを使うことになったので、年末年始のお休みを使って勉強してみました。

JavaScript本格入門を読んでみたよ

どうやって勉強するかはJavaScriptを専門言語として勉強している人に聞くのが一番。おすすめの本を教えてもらいました!

勉強を始めようと思ったのが旅行出発前だったので、Amazonでは間に合わないぞということで本屋に駆け込んで、在庫があったJavaScript本格入門 ~モダンスタイルによる基礎からAjax・jQueryまでを購入しました。

この本は、他の言語やオブジェクト指向の知識を持った人がJavaScriptの クラスがないオブジェクト指向 を理解しやすいように配慮されており、JavaScriptの場合はこんな仕様なんだ、アレはこう表現するんだ、というのがとてもわかりやすかったように思います。

読んでみてJavaScript以前のレベルで知らなかったこと

これらを知らなかったのはお恥ずかしい話ですが、この本を読んだことがきっかけで知ったこと〜優しい編〜 ですっ!(/・ω・)/

HTMLを勉強したのは小学生だったので全然名前とか意識してなかった〜

<script type="text/javascript"></script>の中に直接書いてた!!

JavaScriptの言語仕様にまつわる衝撃の事実

1.知らなかった!var省略の恐怖!!

うぉーーvar省略すると勝手にグローバルスコープにするのかぁ!!

無知は恐ろしい。

2.まだある変数とスコープの恐怖!!

ローカル変数内で、グローバル変数に値を代入したつもりが、できてない…!?
JavaScriptでは、変数はどこで var を付けて宣言されても、スコープ先頭から有効なんですねー。

最初に全部var付けて宣言しておけば、グローバルとローカル間違えないですもんね。。

3.これで終わったと思うな、制御構文の恐怖!!

あばばばば
他の言語やってると、for文の中で宣言した変数は、for文抜けたら無効だと思いますよね!JavaScriptだと、for抜けてからも値が変数に残っている(というか変数が残っている)んです!forの前に同じ前の変数があったら、そいつの中身が変わっちゃうんです!
過去のコードが怖くなる話だ!!(/ω・\)

最難関、プロトタイプ継承

JavaScriptはオブジェクト指向言語です。しかし、多くのオブジェクト指向言語でつきものである”クラス”は存在しません。

クラスがないオブジェクト指向ってどういうことでしょう。

こんなのオブジェクト指向なんでしょうか!?
もしかして、無理矢理オブジェクト指向を実現するためにJavaScriptの仕様をハックしたんじゃないの?
本当に最初からオブジェクト指向で設計してたわけ??

なんと、クラスがないのは意図された仕組みだったようです。
どういうこと…!?
どうしてクラスを捨てたの!!

クラスベースのオブジェクト指向で継承を使ってプログラムを作ると、たくさんのクラスに継承されている根幹のクラスを仕様変更するのは影響が大きくなりすぎてしまい、そうやすやすと機能追加できなくなる。

そこで、継承した子供の方から、継承元を拡張できるべきではないのか、という発想でJavaScriptが採用したのが、プロトタイプベースのオブジェクト指向だそうです。(間違っていたら遠慮なくコメントでツッコミをいただけますと幸いでございます( ≧ω≦)っっっ)

というわけでJavaScriptのオブジェクト、プロトタイプ、プロトタイプチェーンという概念の理解が、JavaScript言語設計の根幹に関わる最重要項目なわけですが、、、

オブジェクト指向に始まりプロトタイプチェーンなど、
この辺を理解するのが凄く難しいのです。

わけわかめなプロトタイプチェーン、果てはタイムラインにこんなコラージュが届くに至りました。
プロトタイプ継承難しい!!

ちなみに、プロトタイプ継承を使いこなす色々なパターンはオブジェクト指向JavaScript
のほうが多く例が載っているかもしれません。

また、現在主流になりつつあるJavaScriptの新しい仕様ECMAScript5では、オブジェクト指向周りが強化されており、新しい内容についてはオブジェクト指向JavaScriptの原則が詳しいと思われます。

JavaScript本格入門 ~モダンスタイルによる基礎からAjax・jQueryまででひと通り学んだら、上記2冊も参考にされると理解が深まる(場合によっては謎が深まる可能性もありますが)と思います!!

あとはこちらのスライドがわかりやすいという情報を頂きました。

ひと通り勉強してからこのスライドを見ると、学んだことがとても良く整理されました。こちらで復習されることをオススメします!!

お役に立ちましたか?

  • このエントリーをはてなブックマークに追加

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">