prototype調査
JavaScriptのprototypeについて
プロトタイプベース
まず、JavaScriptのオブジェクト指向は正確にはプロトタイプベースのオブジェクト指向というものらしい。
例によってWikiPediaに頼る。
http://ja.wikipedia.org/wiki/プロトタイプベース
2006年7月20日現在詳細な解説は掲載されていないので、他の参考文献。
http://codezine.jp/a/article.aspx?aid=222
あるいはWikiPediaのオブジェクト指向に関する、インスタンスベースという項目の解説など。
http://ja.wikipedia.org/wiki/オブジェクト指向プログラミング
まず、そもそもプロトタイプとはなんぞやという事でWikiから一部引用。
情報工学においては、プロトタイプは関数・サブルーチンの宣言を指す(たとえば、C言語のプロトタイプ関数宣言など)。
しかし、たいていのオブジェクト指向プログラミング言語では、プロトタイプは「クローンとしての新しいオブジェクト」を作ることができるオブジェクトを指す。
全然解説になってないが、要するに「プロトタイプベースという新しい概念」と思った方がいいようだ。
より詳しい解説
Effective JavaScriptという素敵サイト。
http://www.interq.or.jp/student/exeal/dss/ejs/3/2.html
ほぼここの解説で全網羅されていると思われる。
実際に検証
http://tsuge.astgate.biz/proto/prototest.html
とりあえず簡単に。チェーンは確認出来る。eval形式になっているので適当にいじってみていただければわかりやすいと思われる。
例えばObject.prototypeをいじっている前後に下記ソースを代入すれば、
for (var a in t) { addLog("t."+a+":"+eval("t."+a)); }
eachが破壊される様子なども見て取れる。
明日以降への持ち越し
まだ少し不明な点があるので、明日また少し調査するものとする。
以下、列挙。
- プロトタイプベースとprototypeプロパティの関係
- コンストラクタとクラスの関係
- クローンとインスタンスの相違点。クローン=インスタンスなのか、クローン=prototypeプロパティのチェーンを差しているのか?
- constructorプロパティとConstructの関係
- ECMAScriptとJavaScriptの関係
はまりそう。
一日30分とかじゃなくて、2,3日まとめてやりたいところだが。
*1:そう呼ぶかは不明