【问题标题】:TypeError: Attempted to assign to readonly property when overriding the toString() methodTypeError:覆盖 toString() 方法时尝试分配给只读属性
【发布时间】:2016-12-07 21:55:19
【问题描述】:

我有一个对象,其实例变量包含一个对象列表。现在我想在我的元素列表中添加一个自定义的 toString() 方法(Element 也有一个自定义的 toString() 方法)。我尝试了以下方法,它在浏览器中工作:

class Cell {
  constructor(public id: string, public elements: Element[]) {
    this.elements.toString = (): string => this.elements.join(' | ');
  }
}

但是,在使用 jasmine 运行测试时,我在初始化 Cell 时收到错误 TypeError: Attempted to assign to readonly property.

为列表获取自定义 toString() 方法的最佳方法是什么(而不是 [elem1, elem2, elem3])?有没有办法告诉茉莉这次重新分配没问题?

【问题讨论】:

  • 您是否尝试将自定义的toString 添加到Array ?最好创建一个类,比如ElementsList,由Elements 的数组构造而成,并且具有定制的toString 方法
  • 重写原型被认为是不好的做法,您应该将自定义 toString 函数重命名为其他名称(例如 customToString、convertToString 等)
  • @BrunoGrieder:是的,这是一个很好的解决方法。
  • @fwind 太好了。如果你想关闭那个,让我把这个作为答案发布
  • @borislemke:就我而言,显示对象的组件应该与不同的对象一起使用。我认为设置 toString 方法会很好,因为它在每个对象中都给出了。

标签: javascript typescript jasmine


【解决方案1】:

您是否尝试将自定义 toString 添加到 Array

最好创建一个类,比如ElementsList,由元素数组构造而成,并具有定制的toString 方法

(注意:一个简单的辅助函数也可以)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 2016-10-08
    • 2017-03-08
    相关资源
    最近更新 更多