# Защищенные методы в ООП в JavaScript

Приватные методы не наследуются и не видны снаружи класса. Иногда, однако, нужны методы, которые наследуются, но не видны снаружи класса. Такие методы называются защищенными (protected). JavaScript, к сожалению, не поддерживает таких методов.

Поэтому я предлагаю ввести некоторое соглашение, позволяющее создавать такие методы. Будем начинать имена таких методов через подчеркивание. Фактически мы используем старое общепринятое соглашение о закрытых методах. Только называем такие методы защищенными в знак того, что они наследуются, но мы не будем использовать их снаружи. Впрочем, именно так они и применяются по древнему соглашению.

Итак, давайте напишем класс-родитель с защищенным методом:

`class User { setName(name) { this.name = name; } getName() { return this._capeFirst(this.name); } _capeFirst(str) { return str[0].toUpperCase() + str.slice(1); } }`

Воспользуемся этим защищенным методом в классе-потомке:

`class Student extends User { setSurn(surn) { this.surn = surn; } getSurn() { return this._capeFirst(this.surn); } }`

В следующем коде сделайте вспомогательный метод защищенным:

`class User { setName(name) { if (this.notEmpty(name)) { this.name = name; } } getName() { return this.name; } notEmpty(str) { return str.length > 0; } } class Employee extends User { setSurn(surn) { if (this.notEmpty(surn)) { this.surn = surn; } } getSurn() { return this.surn; } }`
←→
↑