【问题标题】:Add properties to JavaScript Error object?向 JavaScript 错误对象添加属性?
【发布时间】:2018-04-25 05:09:47
【问题描述】:

我看到根据MDN - Error 文档,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...

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

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

【问题讨论】:

  • 当然,没关系。唯一需要担心的可能是属性名称(将来?)可能与原生名称发生冲突
  • @Bergi - 对……当然

标签: javascript error-handling javascript-objects


【解决方案1】:

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

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

const customError = new CustomError('tag1');

console.log(customError.__tag); // 'tag1'

【讨论】:

  • 我知道这个选项,但我这里没有任何真正的扩展。通常你会扩展一个类以进一步采取它的行为。在这里我已经可以添加属性了,对吧?
  • 除了class extends Error 需要环境中的原生 ES6 支持之外,我认为 OP 在这里所做的工作没有太大区别
  • 我喜欢这种方法!我使用了它,还包含了一个构造函数参数,用于传递 super 调用中的消息值。我建议对您的答案进行修改,以将其包含在示例中。
猜你喜欢
  • 2011-11-09
  • 2013-11-07
  • 1970-01-01
  • 2018-07-24
  • 2016-12-30
  • 1970-01-01
  • 2011-11-01
  • 2015-07-04
  • 1970-01-01
相关资源
最近更新 更多