Skip to content

Instantly share code, notes, and snippets.

@alinastorm
Last active January 27, 2019 19:20
Show Gist options
  • Save alinastorm/c73fc78d8fac79480abbfae2907aae69 to your computer and use it in GitHub Desktop.
Save alinastorm/c73fc78d8fac79480abbfae2907aae69 to your computer and use it in GitHub Desktop.
# Геттеры, сеттеры и вычисляемые свойства в классах

Геттеры, сеттеры и вычисляемые свойства в классах

В классах, как и в обычных объектах, можно объявлять геттеры и сеттеры через get/set, а также использовать […] для свойств с вычисляемыми именами:

	'use strict';

	class User {
		constructor(firstName, lastName) {
			this.firstName = firstName;
			this.lastName = lastName;
		}

		// геттер
		get fullName() {
			return `${this.firstName} ${this.lastName}`;
		}

		// сеттер
		set fullName(newValue) {
			[this.firstName, this.lastName] = newValue.split(' ');
		}

		// вычисляемое название метода
		["test".toUpperCase()]() {
			alert("PASSED!");
		}

	};

		let user = new User("Вася", "Пупков");
		alert( user.fullName ); // Вася Пупков
		user.fullName = "Иван Петров";
		alert( user.fullName ); // Иван Петров
		user.TEST(); // PASSED!

При чтении fullName будет вызван метод get fullName(), при присвоении – метод set fullName с новым значением.

``` class не позволяет задавать свойства-значения В синтаксисе классов, как мы видели выше, можно создавать методы. Они будут записаны в прототип, как например User.prototype.sayHi.

Однако, нет возможности задать в прототипе обычное значение (не функцию), такое как User.prototype.key = "value".

Конечно, никто не мешает после объявления класса в прототип дописать подобные свойства, однако предполагается, что в прототипе должны быть только методы.

Если свойство-значение, всё же, необходимо, то можно создать геттер, который будет нужное значение возвращать.```

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment