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