2006年10月18日 09:20 [Edit]

javascript - プロトタイプ的継承

がーん。この感動はY combinatorを見たときに匹敵する。

Prototypal Inheritance
function object(o) { function F() {} F.prototype = o; return new F(); }

なぜこれがそれほど感動的かというと....

これを使えば、ArrayやObjectといったBuilt-Inからも難なく継承できるから。

継承のやり方としてはPrivate Members in JavaScriptが圧倒的に有名で、日本でもbrazilさんによる邦訳、Collection & Copy - JavaScriptにおける古典的継承もよく知られていると思うけど、この三行を目の前にしては霞む。でもprototypeを代入するとinstanceまで継承されるというのは黒魔術じみてるなあ。

たとえば、Arrayを継承したobject。

もちろん、こうしてもいい。

でも、NumberやStringといったAtomicなものはだめ。

要は、Prototype.property = function(){ /*...*/ }を受け付けるもののみOKということ。AtomicなものはPrototype.prototype.method = function(){ /*...*/ }という書き方しか出来ない。

うーん。嬉しさも、中くらいかなおらがJS。

Dan the Prototypo Generator


この記事へのトラックバックURL

この記事へのトラックバック
かえってわかりにくくなっている感じをかつてさんざん実感したので。 JavaScriptのオブジェクトについて考察してみた - あと味
javascript - にはクラスはない【404 Blog Not Found】at 2009年06月13日 22:03
OKWaveの質問で見かけたリンクから。なるほどね〜。 ...
404 Blog Not Found:javascript - プロトタイプ的継承【だぶだぶノート】at 2007年11月03日 19:01
Array の場合、継承というにはマズくないでしょうか?なにか勘違いしているかも知れませんが、トラックバックしました。
Javascript:Array オブジェクトの継承では length が予期しない値を返す【Script雑感】at 2007年02月21日 16:02
Perl5の欠点:Object Systemが後付けなこと。 Perl5の利点:Object Systemが跡づけなこと。
perl - Object::PrototypeでPOMを実装【404 Blog Not Found】at 2006年10月22日 22:22
「404 Blog Not Found:javascript - プロトタイプ的継承」とその続編「404 Blog Not Found:javascript - プロトタイプ的継承完全版」は、案の定反応すべきbloggersが然るべき反応をしてくれた。これをbloggingの魅力と言わずしてなんと呼ぼうか。 プリミティブ値でもプ....
javascript - Prototypal Object Modelの落とし穴【404 Blog Not Found】at 2006年10月19日 11:39
最近、プロトタイプ的継承の話しが盛り上がっています。 http://blog.livedoor.jp/dankogai/archives/50662064.html http://labs.cybozu.co.jp/blog/kazuho/archives/2006/10/javascript_string.php http://blog.livedoor.jp/dankogai/archives/50662606.html 最終形がやた
[javascript] 関数一発でプロトタイプチェーンに繋げて、オブジェクトをクローンする。【IT戦記】at 2006年10月19日 05:30
書き上げた後に元記事の続きが出ているのに気づいたが、方向性が違うようなのでそのまま掲載。 404 Blog Not Found:javascript - プロトタイプ的継承 (元記事: Prototypal Inheritance) より。継承と
プリミティブ値でもプロトタイプ的継承【Days on the Moon】at 2006年10月18日 23:52
Kazuho@Cybozuさま、いつもありがとうございます。 Kazuho@Cybozu Labs: JavaScript の String 型を継承する 結論から言うと、String 型も継承っぽいことができます。こんな感じ。 おかげでプロトタイプ的継承モデルの完全版が出来ました。
javascript - プロトタイプ的継承完全版【404 Blog Not Found】at 2006年10月18日 21:12
 javascript - プロトタイプ的継承 (javascript - プロ...
JavaScript の String 型を継承する【Kazuho@Cybozu Labs】at 2006年10月18日 14:33
 javascript - プロトタイプ的継承 (javascript - プロ...
JavaScript の String 型を継承する【Kazuho@Cybozu Labs】at 2006年10月18日 14:20