Инструменты пользователя

Инструменты сайта


typescript:oop:getters_and_setters

TypeScript Getters и Setters

вступление в TypeScript Getters и Setters

Ниже показан простой класс Person с тремя свойствами: age, firstName, and lastName:

class Person {
    public age: number;
    public firstName: string;
    public lastName: string;
}

Чтобы получить доступ к любому свойству класса Person, вы можете просто поступить следующим образом:

let person = new Person();
person.age = 26;

Предположим, что вы присваиваете свойству age значение, полученное из пользовательского ввода:

person.age = inputAge;

Вводимое значение может быть любым числом. Чтобы убедиться в достоверности возраста, вы можете провести проверку перед назначением следующим образом:

if( inputAge > 0 && inputAge < 200 ) {
    person.age = inputAge;
}

Использование этой проверки во всех местах является избыточным и утомительным.

Чтобы избежать повторения проверки, вы можете использовать setters и getters. getters и setters позволяют вам контролировать доступ к свойствам класса.

Для каждого свойства:

  • getter метод возвращает значение значения свойства. Средство получения также называется средством доступа.
  • setter метод обновляет значение свойства. Сеттер также известен как мутатор.

getter метод начинается с ключевого слова get, а метод setter начинается с ключевого слова set.

class Person {
    private _age: number;
    private _firstName: string;
    private _lastName: string;
 
 
    public get age() {
        return this._age;
    }
 
    public set age(theAge: number) {
        if (theAge <= 0 || theAge >= 200) {
            throw new Error('The age is invalid');
        }
        this._age = theAge;
    }
 
    public getFullName(): string {
        return `${this._firstName} ${this._lastName}`;
    }
}

Как это работает.

  • First, Сначала измените модификаторы доступа свойств age, FirstName и LastName с public на private.
  • Во-вторых, измените свойство age на _age.
  • В-третьих, создайте методы getter и setter для свойства _age. В методе setter проверьте достоверность введенного возраста, прежде чем присваивать его свойству _age.

Теперь вы можете получить доступ к методу определения возраста следующим образом:

let person = new Person();
person.age = 10;
Обратите внимание, что вызов setter не содержит круглых скобок, как в обычном методе. Когда вы вызываете person.age, вызывается метод setter возраста. Если вы присвоите недопустимое значение возраста, setter выдаст сообщение об ошибке:
person.age = 0;

Error:

Error: The age is invalid

Когда вы обращаетесь к person.age, вызывается getter возраста.

console.log(person.age);

Следующее добавляет методы getters и setters к свойствам FirstName и LastName.

class Person {
    private _age: number;
    private _firstName: string;
    private _lastName: string;
 
    public get age() {
        return this._age;
    }
 
    public set age(theAge: number) {
        if (theAge <= 0 || theAge >= 200) {
            throw new Error('The age is invalid');
        }
        this._age = theAge;
    }
 
    public get firstName() {
        return this._firstName;
    }
 
    public set firstName(theFirstName: string) {
        if (!theFirstName) {
            throw new Error('Invalid first name.');
        }
        this._firstName = theFirstName;
    }
 
    public get lastName() {
        return this._lastName;
    }
 
    public set lastName(theLastName: string) {
        if (!theLastName) {
            throw new Error('Invalid last name.');
        }
        this._lastName = theLastName;
    }
 
    public getFullName(): string {
        return `${this.firstName} ${this.lastName}`;
    }
}

Дополнительные примеры

Как вы можете видеть из кода, setters полезны, когда вы хотите проверить данные перед присвоением их свойствам. Кроме того, вы можете выполнять сложную логику.

Ниже показано, как создать полное имя getter and setter.

class Person {
    // ... other code 
    public get fullName() {
        return `${this.firstName} ${this.lastName}`;
    }
 
    public set fullName(name: string) {
        let parts = name.split(' ');
        if (parts.length != 2) {
            throw new Error('Invalid name format: first last');
        }
        this.firstName = parts[0];
        this.lastName = parts[1];
    }
}

Как это работает.

  • getter возвращает объединение имени и фамилии.
  • Метод setter принимает строку в качестве полного имени в формате: first last и присваивает первую часть свойству first name, а вторую часть свойству last name.

Now, you can access the fullname setter and getter like a regular class property: Теперь вы можете получить доступ к setter и getter полного имени как к обычному свойству класса:

 let person = new Person();
 person.fullname = 'John Doe';
 
 console.log(person.fullName);
typescript/oop/getters_and_setters.txt · Последние изменения: 2023/02/12 21:58 — werwolf