【问题标题】:TypeError: "stack" is read-only类型错误:“堆栈”是只读的
【发布时间】:2016-08-27 10:46:07
【问题描述】:

我有一个自定义错误对象,我正在尝试更改继承的堆栈。

this.stack = (new Error(message)).stack

由于某种原因,此错误仅在 firefox 中发生。

TypeError: "stack" is read-only

Here's the source.

【问题讨论】:

    标签: javascript class object error-handling


    【解决方案1】:

    您正在扩展 es6-error,它定义了 stack 属性,如下所示:

    Object.defineProperty(this, 'stack', {
      enumerable : false,
      value : (new Error(message)).stack,
    });
    

    Source

    默认情况下,已定义属性is supposed to be falsewritable 属性。在严格模式下,this will result in an error。因此,您的代码似乎在 Firefox 的严格模式下运行。

    【讨论】:

    • 有没有办法让我与es6-error 类交互并拥有一个可写的stack
    • @ThomasReggi 不是。尝试重新定义属性will result in an error. 您可以使用不同的名称创建新属性,但不能更改现有属性。
    • @ThomasReggi 您可以使用Object.defineProperty(this, 'stack', { ... }) 而不是赋值 (this.stack = ...) 来专门在原型子对象上创建属性,即使原型父对象具有同名的不可写属性。不过,我不知道这如何/是否适用于类机制。
    • @apsillers 我试过这个,我得到另一个错误can't redefine non-configurable property "stack"
    • 谢谢大家! es6-error 模块的所有者发布了更新并使堆栈可写!耶!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 2016-02-11
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    相关资源
    最近更新 更多