JavaScript である種のクラス階層を実装しようとしています。プロトタイプ チェーンは理解できたと思いますが、コンストラクター チェーンを整理する必要があります。David Flanagan's Definitive Guideに従って、私は書きました
function DerivedClass()
{
BaseClass.apply(this, arguments); // chain constructors
// do some initializations specific to DerivedClass...
}
var foo = new DerivedClass();
whereBaseClass()
は C++ で記述された私のネイティブ関数です (私はQtScriptを使用しています)。私の問題はBaseClass()
、コンストラクターとしてではなく、関数として呼び出されることです。
BaseClass()
常にコンストラクターとして動作するようにコーディングできますが、呼び出されます。しかし、いつの日かユーザーの 1 人が忘れnew
て書き込んでしまうのではないかと心配しています。
var bar = BaseClass();
このような状況ではBaseClass()
、グローバル オブジェクトを初期化するよりも賢明なことをしたいと思います。例えば:
if (!context->isCalledAsConstructor()) fail_gracefully();
しかし、コンストラクターの連鎖は失敗します!
コンストラクターをチェーンして、BaseClass()
実際にコンストラクターとして呼び出す方法はありますか? それとも、決して忘れないようにユーザーを教育する必要がありnew
ますか? 現在、上記のテストを次のように置き換えたいと思っています。
if (context->thisObject().strictlyEquals(engine->globalObject()))
fail_gracefully();
しかし、これを処理するためのよりクリーンな方法があるのだろうか。
ありがとう!