web-dev-qa-db-ja.com

ECMAScript 6クラスのゲッターとセッターとは何ですか?

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;
        }
    }
}
90
TruMan1

これらのセッターとゲッターを使用すると、プロパティを直接使用できます(括弧を使用せずに)

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

これは、プロパティの値を設定および取得するためだけです。

95
David Laberge

ES6のゲッターとセッターは、ES5を含む他の言語と同じ目的を果たします。 ES5はすでに Object.defineProperty を介してゲッターとセッターを許可していますが、それらはクリーンではなく、使用するのが面倒です。

事実上、ゲッターとセッターを使用すると、明示的なゲッターメソッドとセッターメソッドを明示的に必要とせずに、プロパティの取得方法と変更方法をカスタマイズしながら、読み取りと書き込みに標準のプロパティアクセス表記を使用できます。

上記のEmployeeクラスでは、これは次のようにnameプロパティにアクセスできることを意味します。

console.log(someEmployee.name);

通常のプロパティアクセスと同様にlookですが、実際には名前を返す前にtoUpperCaseを呼び出します。同様に、これを行う:

someEmployee.name = null;

は、セッターにアクセスし、nameのセッターに導入されたガード句のために、内部の_nameプロパティを変更しません。

また、一般的な質問 なぜゲッターとセッターを使用するのか? を参照してください。メンバーアクセスの機能を変更できると便利な理由の詳細については。

43
Alexis King