Методы доступа get и set

Последнее обновление: 16.05.2021

В стандарте JavaScript ECMAScript 5 была предложена концепция методов доступа: для доступа к свойству определяется пара методов - get-метод для получения значения свойства и set-метод для установки значения. Это довольно распространенная концепция, которая нашла свое применение, например, в Java, где для управления доступом к приватным переменным создается пара методов - get/set, или в C#, где для доступа к приватным переменным создается свойство с двумя методами get/set.

К примеру, у нас есть следующий класс:

class Person {
    name: string;
	age: number;
}

let tom = new Person();
tom.name = "Tom";
tom.age = -1243;
console.log(tom.age);

Здесь полю age, которое представляет условный возраст человека, присваивается некорретное значение.

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

class Person {
    name: string;
	private _age: number;
	private _name: string;
 
    public get age(): number {
        return this._age;
    }
 
    public set age(n: number) {
		if(n < 0 || n > 110){
			console.log("Недопустимый возраст!");
		}
		else{
			this._age = n;
		}
    }
}

let tom = new Person();
tom.name = "Tom";
tom.age = 36;			
console.log(tom.age);	// 36
tom.age = -1243;		// Недопустимый возраст!   
console.log(tom.age);	// 36 

Методы доступа определяются как обычные методы, только перед ними ставятся ключевые слова get/set. Set-метод контроллирует установку значения, а get-метод возвращает значение.

В данном случае мы опосредовали доступ к переменной _age, сделав ее приватной. Теперь к ней можно обратиться только через методы доступа. Метод get просто возвращает значение переменной:

public get age(): number {
        return this._age;
    }

А метод set устанавливает значение _age, но только в том случае, если оно укладывается в корректный диапазон.

Когда мы присваиваем значение:

tom.age = 36;

срабатывает set-метод

Когда мы получаем значение:

console.log(tom.age);

срабатывает get-метод

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850