「コンストラクター」は、それがしているように見えることをしません。これは、その非標準性に加えて、使用を避ける正当な理由です - instanceof とプロトタイプに固執してください。
技術的には、「コンストラクター」は「s」インスタンスのプロパティではなく、透けて見える「サブ」プロトタイプ オブジェクトのプロパティです。Mozilla で「Sub」関数を作成すると、礼儀として Sub 関数を指す「コンストラクタ」を持つ、新しく作成されたデフォルトの Sub.prototype オブジェクトが得られます。
ただし、そのプロトタイプを new Base() に置き換えます。Sub へのリンクを含む元のデフォルト プロトタイプは失われます。代わりに、Sub.prototype は Base のインスタンスであり、「コンストラクター」プロパティをオーバーライドすることはありません。そう:
new Sub().constructor===
Sub.prototype.constructor===
new Base().constructor===
Base.prototype.constructor===
Base
...プロトタイプが変更されていない最も基本的なオブジェクトに至るまで。
これを行うのは従来の/より良いですか?
JavaScript のオブジェクト/クラスを扱う場合、規則は 1 つではありません。すべてのライブラリのメタクラス システムの動作はわずかに異なります。「コンストラクター」を各派生クラスに手動で書き込むものは見たことがありませんが、実際のコンストラクターを本当に利用できるようにしたい場合は、他の方法と同じくらい良い解決策のようです。また、「コンストラクター」を提供しないブラウザー/エンジンと互換性のあるコードを作成します。
ただし、既存の動作の異なる「コンストラクター」プロパティとの混同を避けるために、別の名前を付けることを検討します。