__proto__ で循環継承
Javascript 実装の一部には __proto__ というのがあるのですね。
http://developer.mozilla.org/en/docs/Differential_inheritance_in_JavaScript
これはまさに delegation における parent です。
で、なんでこれが非標準なのでしょうか。プロトタイプベース言語であれば少なくとも内部的にはどうせ __proto__ に相当するものを持たざる得ないわけですから、Javascript は最初敢えてこのスロットを隠したとしか考えられません。そうしたのには何か理由があるのだと思うですが、歴史的経緯とか分からないのでなぜそうしたのかが全く分かりません。利点がなにかあったのでしょうか。
ご存知の方、教えて下さいませ。よろしくお願い致します。
これだけだとつまらないからプロトタイプベース的に循環継承やっておきます!
var child = {} child.__proto__ = child;
結果は次のようになりました。なお、インタプリタには SpiderMonkey を使用しています。
js: Cyclic __proto__ value not allowed. js: org.mozilla.javascript.EvaluatorException: Cyclic __proto__ value not allowed.
というわけで、とっても親切な SpiderMonkey さんは、きちんと循環継承を禁止してくれました!
...などと納得して良いのでしょうか。というわけで Self はどうなっているのか調べていきたいと思います。