javascript - 使用 Javascript ES5 创建自定义错误
问题描述
我正在阅读Mozilla的网络文档中关于如何在 Javascript 中扩展内置错误的以下片段。我使用 ES5 是因为我在使用 ES6 语法时遇到了问题。
我不明白的是:有"Code Chunk C"
必要吗?
"Code Chunk B"
将 CustomError 的原型设置为一个对象,其 (1) 原型将是Error.prototype
并且 (2) 将具有名为 的constructor
属性Error
。
在下面的代码块("Code Chunk C"
)中Object.setPrototypeOf
,根据我的理解,将设置原型CustomError
为Error
。这很令人困惑,我们不是只是将原型设置为Error.prototype
吗?我在有和没有这个代码块的情况下测试了代码,在这两种情况下,结果都是正确的:
const error = CustomError()
error.__proto__ === BaseError.prototype // True
error.__proto__.__proto__ === Error.prototype // True
这不是我所期望的,因为我没想到Error.prototype
会和Error
.
有人可以回答以下问题:
1)"Code Chunk C"
如果首先运行是否有必要"Code Chunk B"
?2)鉴于我之前解释过的困惑"Code Chunk B"
,如何做同样的事情?"Code Chunk C"
提前致谢!
// Start: Code Chunk A
function CustomError(foo, message, fileName, lineNumber) {
var instance = new Error(message, fileName, lineNumber);
instance.foo = foo;
Object.setPrototypeOf(instance, Object.getPrototypeOf(this));
if (Error.captureStackTrace) {
Error.captureStackTrace(instance, CustomError);
}
return instance;
}
// End: Code Chunk A
// Start: Code Chunk B
CustomError.prototype = Object.create(Error.prototype, {
constructor: {
value: Error,
enumerable: false,
writable: true,
configurable: true
}
});
// End: Code Chunk B
// Start: Code Chunk C
// Is the following necessary?
if (Object.setPrototypeOf){
Object.setPrototypeOf(CustomError, Error);
} else {
CustomError.__proto__ = Error;
}
// End: Code Chunk C
解决方案
推荐阅读
- haskell - 在 Haskell 中的每个元素中输出带有 Just 的 Maybe Int 列表
- php - 修复 SQLSTATE[HY000] [1045] 用户 'username'@'localhost' 的访问被拒绝(使用密码:YES)
- javascript - 使用 ReactJS Hooks 时将数据传递给动态点击处理程序
- binance - Binance API 期货 - {'code': -1117, 'msg': 'Invalid side.'}
- swift - SwiftUI 可编辑导航标题
- java - org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“servicePersonalUrgenciasImplementacion”的bean时出错
- java - Java 泛型 - 单个对象或对象列表
- raspberry-pi - 使用 Uinput 将 GPIO 帽子按钮按下映射到命令行互联网广播播放器中的 raspi 击键
- vue.js - 自定义指令库中未捕获的 TypeError
- python - 有没有办法使用 music21 从 musicxml 文件中读取 Rests?