クラスの継承使わないとこれは生産性にも影響するし、
「どげんかせんといかんな」と思えるところがありましてですね。
今回、勉強したよ。
web 屋さんでガリガリっと書いたりする人には
常識なんだろけど、かれこれ5〜6年前の javascript "しか"
知らない+根っこが c\+\+ の oop の考え方"しか"できない
オイラには結構な苦行でした。
で、やっぱり備忘録で残しておく。
まー、やりたかった事は c\+\+ 的にはこんな感じ↓
| #include <iostream> #include <sstream> using namespace std; /** * 親クラス * */ class Parent { public: Parent(string& str) { m_str = str; }; virtual ~Parent() {}; public: void disp() { cout << this->m_str << endl; } private: string m_str; }; /** * 子クラス * */ class Child : public Parent { public: Child(string& str):Parent(str) { }; ~Child() {}; }; int main(void) { string str = "hello world."; Child child(str); child.disp(); return 0; } |
実行の結果はもちろん "hello world." が表示される。
(c\+\+ 的 oop で、基底クラスとして作ったクラスのデストラクタに
"virtual" と普通に書けるのかは結構分かれ目なところがありますね。
ですよね。itose 氏(^^;)
で、これを javascript で書くとこうなる↓
| /** * 親クラス * */ var Parent = function () { this.initialize.apply(this, arguments); } Parent.prototype = { initialize : function(_str) { this.str = _str; }, disp : function() { alert(this.str); } } var Child = function () { this.initialize.apply(this, arguments); } Child.prototype = new Parent; child = new Child('hello world.'); child.disp(); |
(子クラス側の宣言の仕方に悩まされたんよ・・・orz
いや、ほんと。マジで。)
javascript の継承の仕方にはいくつかあるみたいですが、
今回はプロトタイプによる継承でやってみた。
(若干、ここら辺がまだきちんと理解できてない。。。)
[[JavaScript]JavaScript継承パターンまとめ]
http://d.hatena.ne.jp/shogo4405/20070121/1169394889
動的言語で継承した場合の違いとか、結構違和感があったんだけど、
今日会社の大先輩とやった javascript 勉強会で大分理解したかな。
で、javascript 大っ嫌いだったんだけど、ここら辺を若干だけど
理解して、「あー、それって賢いなー」とか思い出したら、結構
好きになれた。
javascript ほんと奥深いなー。。。
(まー、js の動的なクセを知るために頭の中で ruby で変換
してやらないと考えきれないんだけどね。)
がんばってべんきょーしなきゃなー(ほぼ棒読み)
ん?で、生産性どうなったかって??
そら、あり得ないぐらいあがったがな!
oop の醍醐味っすわ(^^;
