Objectのconstructorの謎

問題

ActionScriptで抽象クラスを作ろうとしてhttp://unbland.org/blog/2008/10/30/182.htmlを参考にしてそれっぽいものを書いてみたのだけれども,

Object(this).constructor

が納得いかない.thisは必ずObjectのsubclassなのだからconstructorプロパティにアクセスするのになぜObjectクラスにキャストしないといけないのか.しかし実際にObjectクラスにキャストせずにコンパイルするとstrictモード*1だと型エラーになる

http://gyazo.com/1bb6a7e1aed75472651ff61e525ecd35.png

そしてFlexのLanguage ReferenceのObjectの項には

The Object class is at the root of the ActionScript  class hierarchy. Objects are created by constructors using the new operator syntax, and can have properties assigned to them dynamically.

と書いてある.id:nitoyonさんの予想だと

[09/12/24 12:28:10] NANKI Haruo: Object(this)でdynamicになるのは、Objectがdynamicだからね。
[09/12/24 12:29:02] &ujihisa25: え、ということはつまり
[09/12/24 12:29:09] &ujihisa25: Object(this)でdynamicになるのは、Objectがdynamicだからってことか
[09/12/24 12:29:40] NANKI Haruo: みえてきたぞ。
[09/12/24 12:30:02] nitoyon: Object のメソッドやプロパティって、クラス的なものじゃなくdynamicに設定されていると思われる
[09/12/24 12:30:37] nitoyon: なので普通に class A を作った場合、A クラスに constructor は定義されない。よって参照するとエラーとなる
[09/12/24 12:31:03] nitoyon: strict じゃないときは、コンパイル時に解決できなくても文句いわない。実質的には、hoge["constructor"] でビルドするのと同じ
[09/12/24 12:32:20] suzukitomohiro: Aクラスに同名のメソッドは定義されるけれども,constructorという名前のプロパティは定義されない,と.

推測

という感じでObjectクラスのconstructorプロパティはコンパイル時には定義されずに,ランタイム時に設定されるので,コンパイル時には本当にconstructorプロパティが存在しているかわからない.

よってstrictな場合は定義されているかわからないプロパティにアクセスしているのでエラーになるし,Objectクラスにキャストすることで定義されていないかもしれないconstructorプロパティにアクセスすることができる.standardな場合はもちろんエラーは出ない.

Future work

このようなActionScriptのObjectクラスのconstructorプロパティにまつわる情報はどこに書いてあるんでしょう?