Статьи по JavaScript

This, Getters и Setters в классах Javascript

Классы

Объектно-ориентированyное программирование в Javascript не является чем-то новым, но в то время как многие другие языки использовали синтаксис классов, Javascript все еще не использовал его. Это всегда было важной деталью, которая беспокоила некоторых разработчиков, потому что было немного сложнее легко мигрировать между технологиями.

Так, начиная с ECMAScript 2015 (ES6), классы стали частью языка. Это не изменило и не добавило функциональности, но внесло лучшую организацию в код, кроме того, вошло в стандарт других технологий.

Видите разницу:

//не используя синтаксис класса var person = { name: 'Иван', lastname: 'Иванов', } //использование синтаксиса класса class Person { constructor(name, lastname){ this.name = name this.lastname = lastname } } let ivan = new Person ('Иван', 'Иванов')
Code language: JavaScript (javascript)

Представьте, что вам нужно как-то изолировать или защитить элементы этих классов. Что для этого использовать?

This

Представьте, что вы объявляете класс учителей следующим образом:

class Teacher { constructor(name, lastname, course){ this.name = name, this.lastname= lastname, this.course= course } } let ivan = new Teacher('Иван', 'Иванов', 'История')
Code language: JavaScript (javascript)

И внутри этого класса вы захотели добавить метод – который является не более чем функцией, специфичной для него – под названием greeting, который будет печатать на консоли “Доброе утро” для этого учителя.

Для этого нам понадобится соединить свойства имя и фамилия во время печати приветствия. Вот тогда и появляется это. Это слово происходит от английского “this”, поэтому можно понять, что его использование направлено на то, чтобы направить эти свойства на сам класс. следующим образом:

class Teacher { constructor(name, lastname, course){ this.name = name, this.lastname= lastname, this.course= course } greeting(){ console.log('Доброе утро ' + this.name + ' ' + this.lastname) } } let ivan = new Teacher('Иван', 'Иванов', 'История') ivan.greeting() //Доброе утро Иван Иванов
Code language: JavaScript (javascript)

Но тогда почему мы не можем использовать для этого само имя класса? Все просто, представьте, что есть глобальная переменная с таким же именем teacher. Если мы используем teacher.name внутри класса, это может привести к двусмысленному коду, что вызовет проблемы.

Getter

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

class Course { constructor(material, teacher, duration){ this.material = material, this.teacher = teacher, this.duration = duration } get prof() { return this.teacher } } let poo = new Course('История России 17 век.', 'Иван', '1 семестр') console.log(poo.prof) //Иван
Code language: JavaScript (javascript)

В этом примере мы просто использовали геттер для возврата значения, которое уже было объявлено фиксированным образом. Что если мы хотим вернуть динамическое значение, как среднее значение других свойств? Мы можем сделать это следующим образом:

class Bulletin { constructor(participation, proof, work){ this.participation = participation, this.proof = proof, this.work = work } get media() { return parseInt((this.participation + this.proof + this.work) / 3) } } let bulletinSemester = new Bulletin(8, 6, 7.5) console.log(bulletinSemester.media) //7
Code language: JavaScript (javascript)

Некоторые важные моменты, на которые следует обратить внимание при использовании геттеров, следующие:

  • Могут иметь идентификатор типа numeric или string.
  • У вас не должно быть никаких параметров.
  • Для одного и того же свойства не может использоваться более одного геттера, также не может быть общего свойства с тем же именем, что и геттер.

Однако как мы можем установить значение свойства с помощью параметра? Итак, у нас есть последний модификатор – сеттер.

Setter

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

class Student { constructor(name, course, semester){ this.name = name, this.course= course, this.semester = semester } set nameStudent (nameStudent) { this.name = nameStudent } } let ivan = new Student('', 'История', 5) ivan.nameStudent = 'Иван' console.log(ivan.name) //Иван
Code language: JavaScript (javascript)

Поэтому в данном случае мы можем вызвать сеттер, передав параметр для изменения значения свойства name студента.

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

  • Может иметь идентификатор типа numeric или string.
  • У вас должен быть ровно один параметр.
  • Нельзя иметь одну и ту же номенклатуру для свойства и функции.

Теперь мы можем как получать доступ к свойствам объекта (с помощью геттеров), так и изменять их значения (с помощью сеттеров).

class Student { constructor(name, course, semester){ this.name = name, this.course= course, this.semester = semester } get nameStudent(){ return this.name } set nameStudent(nameStudent) { this.name = nameStudent } } let ivan = new Student('', 'История', 5) ivan.nameStudent = 'Иван' console.log(ivan.name) //Иван
Code language: JavaScript (javascript)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *