9.4Classes & Constructors / toString

カスタム`toString()`メソッド

カスタムの`toString()`メソッドを記述しても問題ありませんが、それが正常に動作し、副作用がないことを確認してください。

`toString()`メソッドは、オブジェクトが文字列として表現される際に暗黙的に呼び出されることがあります(例:`console.log('Jedi is ' + luke)`)。このメソッド内で状態を変更したり、非同期処理を行ったりすると、予期せぬタイミングで副作用が発生し、デバッグが非常に困難になります。例えば、`toString()`内でAPIを呼び出すと、ログ出力のたびにネットワークリクエストが発生してしまいます。そのため、このメソッドは常にオブジェクトの現在の状態を表現する文字列を同期的に返すだけの「純粋な」関数として実装することが重要です。

❌ Bad
// bad: No custom toString()
class Jedi {
  constructor(options = {}) {
    this.name = options.name || 'no name';
  }
}
✅ Good
// good
class Jedi {
  constructor(options = {}) {
    this.name = options.name || 'no name';
  }

  getName() {
    return this.name;
  }

  toString() {
    return `Jedi - ${this.getName()}`;
  }
}