ECMAScript 6クラスでゲッターとセッターのポイントが何であるかについて私は混乱しています。目的は何ですか?以下は私が言及している例です:
class Employee {
constructor(name) {
this._name = name;
}
doWork() {
return `${this._name} is working`;
}
get name() {
return this._name.toUpperCase();
}
set name(newName){
if(newName){
this._name = newName;
}
}
}
これらのセッターとゲッターを使用すると、プロパティを直接使用できます(括弧を使用せずに)
var emp = new Employee("TruMan1");
if (emp.name) {
// uses the get method in the background
}
emp.name = "New name"; // uses the setter in the background
これは、プロパティの値を設定および取得するためだけです。
ES6のゲッターとセッターは、ES5を含む他の言語と同じ目的を果たします。 ES5はすでに Object.defineProperty
を介してゲッターとセッターを許可していますが、それらはクリーンではなく、使用するのが面倒です。
事実上、ゲッターとセッターを使用すると、明示的なゲッターメソッドとセッターメソッドを明示的に必要とせずに、プロパティの取得方法と変更方法をカスタマイズしながら、読み取りと書き込みに標準のプロパティアクセス表記を使用できます。
上記のEmployeeクラスでは、これは次のようにname
プロパティにアクセスできることを意味します。
console.log(someEmployee.name);
通常のプロパティアクセスと同様にlookですが、実際には名前を返す前にtoUpperCase
を呼び出します。同様に、これを行う:
someEmployee.name = null;
は、セッターにアクセスし、name
のセッターに導入されたガード句のために、内部の_name
プロパティを変更しません。
また、一般的な質問 なぜゲッターとセッターを使用するのか? を参照してください。メンバーアクセスの機能を変更できると便利な理由の詳細については。