Подтвердить что ты не робот

Что такое геттеры и сеттеры для классов 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;
        }
    }
}
4b9b3361

Ответ 1

Эти сеттер и геттер позволяют использовать свойства напрямую (без использования скобок)

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

Это только для установки и получения значения свойства.

Ответ 2

Getters и seters в ES6 выполняют ту же цель, что и на других языках... включая ES5. ES5 уже позволяет использовать геттеры и сеттеры через Object.defineProperty, хотя они менее чисты и более громоздки в использовании.

Эффективно, получатели и сеттеры позволяют использовать стандартную номенклатуру доступа к свойствам для чтения и записи, сохраняя при этом возможность настраивать способ получения и изменения свойств без необходимости использования явных методов getter и setter.

В вышеприведенном классе Employee это означает, что вы можете получить доступ к свойству name следующим образом:

console.log(someEmployee.name);

Он будет выглядеть как обычный доступ к свойствам, но на самом деле он вызовет toUpperCase в имени перед его возвратом. Аналогичным образом:

someEmployee.name = null;

будет обращаться к установщику и не будет изменять внутреннее свойство _name из-за предложения охраны, введенного в установщик name.

См. также общий вопрос Зачем использовать геттеры и сеттеры? для получения дополнительной информации о том, почему возможность изменять функциональность доступа членов является полезной.