問題は継承チェーンではなく、関数としての呼び出しがコンストラクターの呼び出しとして動作し、オブジェクトをインスタンス化するというErrornew Error事実です。
したがって、実行されたコードを呼び出すと、new ErrorChild実際には次のようになります
function ErrorChild(message) {
new Error (message)
}
待って。しかし、これはどこにも使用されていない(また、コンストラクターによっても返されない)新しいエラー オブジェクトを作成するだけです。そして、単に忘れられます。
したがって、これは実際には実際のインスタンスを変更しません。ErrorChild
したがって、messageアクセスしているプロパティは、ErrorChild.prototypeから継承されたものでError.protyotypeあり、したがってmessageのデフォルト値である空の文字列が含まれています。""
しかし、単純にエラー オブジェクトを「模倣」することはできます。
toStringメソッドの定義された動作と 2 つのプロパティのみが必要なため
エラーの標準プロパティをカバーします。
コンストラクターのプロトタイプを設定して手動でError.prototype
割り当てるだけです。namemessage
function ErrorChild (name,message) {
this.name = name;
this.message = message;
}
ErrorChild.prototype = Error.prototype;
これで、インスタンスを簡単に作成できnew ErrorChild (...)ます。
あなたができることthrowとlog- catch>
throw new ErrorChild("CustomError","Help") //Uncaught CustomError: Help
JSBinのデモはこちら