我想在我的JS代码中扔一些东西,我希望它们是Error的instanceof,但我也想让它们成为其他东西。
在Python中,通常将Exception子类化。
在JS中适合做些什么?
在ES6中:
class MyError extends Error { constructor(message) { super(message); this.name = 'MyError'; } }
该message属性唯一的标准字段Error对象是。(请参阅MDN或EcmaScript语言规范,第15.11节)。其他所有内容都是特定于平台的。
message
Mosts环境设置stack属性,但fileName与lineNumber实际上是无用的继承使用。
stack
fileName
lineNumber
因此,简约的方法是:
function MyError(message) { this.name = 'MyError'; this.message = message; this.stack = (new Error()).stack; } MyError.prototype = new Error; // <-- remove this if you do not // want MyError to be instanceof Error
你可以嗅探堆栈,从堆栈中取消不需要的元素,并提取文件名和行号之类的信息,但是这样做需要有关当前正在运行JavaScript的平台的信息。大多数情况下都是不必要的-如果你确实需要,可以在事后检查中进行。
Safari是一个明显的例外。没有stack属性,但是有throw关键字集sourceURL和line要抛出的对象的属性。这些事情肯定是正确的。
throw
sourceURL
line