Part16:オブジェクトの継承 天国編

海未「それでは前回の地獄編から一転、今回はECMAScript6がもたらした天国を見てみましょう」

海未「前回のサンプルコードを、新しい構文で書き直したものがこれです」

穂乃果「なんか文字数減ってる!」
ことり「prototypeとかなくなってるね」
海未「JavaScriptにもクラスベースオブジェクト指向の考え方が取り入れられて、classというキーワードでオブジェクトの型であるクラスを定義する、という書き方になりました」
穂乃果「前回のと見比べれば、なんとなくわかるよっ」

海未「このコードですが、2015年11月現在FirefoxやOperaやIEではまだサポートされていないため動きません。EdgeのF12開発者ツールで試すといいと思います」
ことり「孤独なHeavenだ・・・」
海未「Chromeも大丈夫だったと思うのですが、試していません・・・それと、Edgeはデフォルト仮引数をサポートしていないので、少し処理を変えている箇所があります」

海未「変更点を整理していきましょう。従来コンストラクタ関数に書かれていた処理は、各クラスのconstructorメソッドに書くことになります」
穂乃果「ふむふむ・・・」
海未「この際、Person.call(this, ...)のように書いていたところは単にsuper(...)に置き換えられます」
ことり「あ、無理矢理頑張ってる感がなくなったね」
海未「そういう無理というか先人の工夫の産物を言語としてサポートするのが目的ですから」
穂乃果「まあまあ、文字数が少なくなるのはいいことだよ」
海未「メソッドはコンストラクタ関数の外側でIdol.prototype.sing = function() {...}のように書いていましたが、クラスの内側に書けるようになりました」
ことり「ちゃんとまとまってると、読みやすいよね」
海未「そうですね。加えて、クラスの内側にメソッドを書いてもメモリ効率の問題は発生しません」
穂乃果「おーっ、至れり尽くせりだねっ!」
海未「継承はprototypeの代入ではなく、class Idol extends Personの形です。(英語のわかる人には)自然な書き方でしょう」
穂乃果「ねえ、今何か台詞に括弧書き付かなかった?穂乃果のこと何か言わなかった?」
海未「気のせいでしょう」

ことり「オブジェクトの使い方は同じなんだね」
海未「構文は変わっても、できあがるものは同じ関数ですから。クラスを用いた構文は単なるシンタックスシュガーなんです」
ことり「じゃあ、見えないところには前回と同じようにプロトタイプの考え方があるんだね」
海未「はい。裏側では前回のようなコードが出来上がっているはずです」


海未「さあ、今日は天国編ですからこの辺で切り上げましょう」
ことり「あれ、早いね」
穂乃果「早いのはいいんだけど、何か用事でもあるの?」
海未「・・・2人とも、分からないのですか?なぜこの講義を今日にしたのか・・・」
穂乃果「えーと・・・なんだっけ、あはは」
海未「穂むらの新作饅頭が今日発売ではないですか!せっかくだから3人で食べようと思っていたのです!」
穂乃果「もー、それだったら食べたいって素直に言ってくれればいいのに」
海未「それでは私の食い意地が張っているみたいではないですか!」
穂乃果「いや実際張ってるよね!?」
ことり「まあまあ、2人とも・・・じゃあせっかくだから、みんなも誘って行きましょう♪」
海未「しかし・・・あまり大勢では迷惑になるのでは」
にこ「話は聞かせてもらったわ!」ガラッ
穂乃果「うわあっ!?にこちゃん!?」
海未「・・・いつから聞いていたのですか?」
にこ「『それでは前回の地獄編から』あたりからよ」
ことり「最初から!?」
穂乃果「にこちゃん、なにやってんの・・・」
にこ「3人で何か面白いことやってるっぽいから、偵察にきたにこ」
海未「はあ・・・しかし今日はもう終わりで・・・」
にこ「分かってるわよ。だからもう凛がみんなを集めて回ってるわ」
海未「え?」
にこ「9人で饅頭食べに行くわよ。いいわね穂乃果?」
穂乃果「・・・もっちろん!いいよね海未ちゃん?」
海未「・・・仕方ありませんね。では、みんなで行きましょうか」


海未「別に最終回ではありませんよ」


LINEで送る
Pocket


返信を残す

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