JavaScriptのクラスセッターの使用方法と例


  1. クラスセッターの基本的な使い方
  2. クラスセッターの引数の制御とバリデーション
  3. クラスセッターのチェーンメソッドとメソッドチェーンの活用
  4. クラスセッターのプライベートプロパティへのアクセス制御

まず、クラスセッターの基本的な使い方を見てみましょう。以下は、Personクラスのnameプロパティにセッターを定義する例です。

class Person {
  constructor() {
    this._name = '';
  }
  get name() {
    return this._name;
  }
  set name(value) {
    this._name = value;
  }
}
const person = new Person();
person.name = 'John';
console.log(person.name); // 結果: John

セッターはsetキーワードを使用して定義し、セッターメソッド名はプロパティ名と同じにします。セッターメソッド内で、プロパティに値を代入する処理を記述します。

次に、引数の制御とバリデーションについて見てみましょう。セッターメソッド内で引数を受け取り、値の制約やバリデーションを行うことができます。

class Person {
  constructor() {
    this._age = 0;
  }
  get age() {
    return this._age;
  }
  set age(value) {
    if (value >= 0 && value <= 120) {
      this._age = value;
    } else {
      console.error('年齢は0から120の間で設定してください。');
    }
  }
}
const person = new Person();
person.age = 25;
console.log(person.age); // 結果: 25
person.age = 150; // 結果: エラー出力 "年齢は0から120の間で設定してください。"
console.log(person.age); // 結果: 25 (エラーのため値は変更されない)

セッターメソッド内で条件式を使用して、引数の値を制御することができます。バリデーションに違反した場合、エラーメッセージを出力したり、値の変更を行わないようにすることができます。

さらに、クラスセッターをチェーンメソッドとして活用する方法もあります。これにより、複数のプロパティに対して一度に値を設定することができます。

class Person {
  constructor() {
    this._name = '';
    this._age = 0;
  }
  get name() {
    return this._name;
  }
  set name(value) {
    this._name = value;
  }
  get age() {
    return this._age;
  }
  set age(value) {
    this._age = value;
  }
  setInfo(name, age) {
    this.name = name;
    this.age = age;
    return this; // メソッドチェーンのために自身のインスタンスを返す
  }
}
const person = new Person();
person.setInfo('John', 25);
console.log(person.name); // 結果: John
console.log(person.age); // 結果: 25

上記のコードでは、setInfoメソッドを追加し、nameageの値を一度に設定できるようにしています。setInfoメソッドでは、thisを返すことでメソッドチェーンを実現しています。

最後に、クラスセッターを使用してプライベートプロパティへのアクセス制御を行う方法について見てみましょう。JavaScriptでは、プライベートプロパティに直接アクセスされないようにするため、セッターとゲッターを使用します。

class Person {
  constructor() {
    this._name = ''; // プライベートプロパティ
  }
  get name() {
    return this._name;
  }
  set name(value) {
    if (typeof value === 'string') {
      this._name = value;
    } else {
      console.error('名前は文字列で設定してください。');
    }
  }
}
const person = new Person();
person.name = 'John';
console.log(person.name); // 結果: John
person._name = 123; // 直接アクセスしてもエラーは出力されない
console.log(person.name); // 結果: 123 (アクセス制御に失敗)

上記のコードでは、_nameをプライベートプロパティとして定義し、セッターメソッドを使用して値を設定しています。プライベートプロパティに直接アクセスしても、セッターが適用されずにアクセス制御に失敗します。

以上が、JavaScriptのクラスセッターの使用方法と例です。クラスセッターを活用することで、オブジェクトのプロパティに対して制約やバリデーションをかけることができます。また、チェーンメソッドやプライベートプロパティへのアクセス制御など、さまざまな方法を組み合わせることで、柔軟なコードを実現することができます。