向 JavaScript Error 对象添加属性?

Ziv*_*evy 6 javascript error-handling javascript-objects

我看到根据MDN - 错误文档,该Error对象可能在不同的浏览器中具有不同的行为。我想看看您对在默认Error对象上添加属性有何看法。

在我的具体代码中,我想用我自己的标签名称标记一个Error对象以供进一步使用,这意味着 -> 向对象添加一个属性,如下所示:

const error = new Error('some message')
if(someConditionExist()){
    error.__myTag = 'tag1';
}
else {
    error.__myTag = 'tag2';
}
//then throwing the error and catch it elsewhere...
Run Code Online (Sandbox Code Playgroud)

我还没有看到任何指导方针,这种事情的含义(如果有的话……)。

你们有任何顾虑吗?您是否在不同浏览器中遇到过任何问题?

Pau*_*oze 6

好吧,我们可以争论您是否应该向内置对象添加自定义属性,但这样的事情可以工作:

class CustomError extends Error {
  constructor(tag) {
    super();
    this.__tag = tag;
  }
};

const customError = new CustomError('tag1');

console.log(customError.__tag); // 'tag1'
Run Code Online (Sandbox Code Playgroud)


Che*_*leg 6

事件虽然是一个老问题,但另一种解决方案可能是,在某些情况下,使用 Object.assign() “动态”添加属性

const error = new Error('some message')
const withTag = Object.assign(error , { __tag: "tag_1"})
Run Code Online (Sandbox Code Playgroud)

请注意,在某些浏览器中的 console.error() 上,您将看不到添加的其他属性。