Рубрики
Без рубрики

Занятия в JS: государственные, частные и защищенные

Несмотря на то, что ES6 представил ключевое слово класса, которое довольно хорошо имитирует классы и позволяет нам прыгать … с меткой JavaScript, начинающих, Codenewbie, WebDev.

Хотя ES6 представил класс Ключевое слово, которое довольно хорошо имитирует классы и позволяет нам прыгать в объектно-ориентированное программирование, JavaScript не хватает возможности создавать публичные, частные и защищенные участники в классе.

Если вы работали с каким-либо объектно-ориентированным языком, вы должны знать важность внутреннего и внешнего интерфейса. Внутренний интерфейс относится к методам и свойствам класса, который доступен только самим классом, а не извне. Напротив, внешний интерфейс имеет методы и свойства, которые также доступны извне класса.

Три основных ключевых слова в игре являются публичными, защищенными и частными.

  1. Public: эти члены класса и доступны всем, кто может получить доступ к экземпляру класса (владельца).
  2. Частные: эти участники доступны только в классе, который создал создание объекта.
  3. Защищенное: это ключевое слово позволяет немного больше доступа, чем частных участников, но намного меньше, чем общественность. Защищенный участник доступен в классе (аналогично частному) и любой объект, который наследует от него. Защищенное значение разделяется на всех уровнях цепочки прототипа. Это не доступно никому другому.

Защищенное ключевое слово – самое сложное ключевое слово из трех, чтобы подражать JavaScript.

Публичный

Это природа по умолчанию JavaScript. Если что -то имеет доступ к объекту, у него есть доступ к своим членам. Пример:

const myObject = {
    name: "Parwinder",
    sayMyName: function () {
        return this.name;
    }
}

console.log(myObject.name); // Parwinder
console.log(myObject.sayMyName()); // Parwinder

В приведенном выше примере я могу получить доступ к свойству и методу без каких -либо проблем. Если бы вы предпочли это в классе синтаксиса:

class ObjectCreator {
    name;

    constructor(name) {
        this.name = name;
    }

    sayMyName() {
        return this.name;
    }
}

const myObject = new ObjectCreator("Parwinder");
console.log(myObject.name); // Parwinder
console.log(myObject.sayMyName()); // Parwinder

Частный

Есть несколько способов создания личных переменных в JavaScript. Сначала закрытие.

function carMonitor() {
    var speed = 0;

    return {
        accelerate: function () {
            return speed++;
        }
    }
}

var car = new carMonitor();
var redCar = new carMonitor()
console.log(car.accelerate()); // 0
console.log(car.accelerate()); // 1
console.log(redCar.accelerate()); // 0
console.log(redCar.accelerate()); // 1
console.log(car.accelerate()); // 2
console.log(redCar.accelerate()); // 2
console.log(speed); // speed is not defined

автомобиль и Redcar поддерживать свой собственный частное скорость переменные и скорость не доступен снаружи. Мы заставляем потребителя использовать методы, определенные для функции или класса, а не доступ к свойствам напрямую (что они не должны). Вот как вы бы инкапсулировали свой код.

Второй путь – с помощью # обозначение.

class ObjectCreator {
    #meaningOfLife;

    constructor(name) {
        this.#meaningOfLife = 42;
    }

    returnMeaningOfLife() {
        return this.#meaningOfLife;
    }

    #returnAMessage() {
        return "You will do great things in life";
    }
}

const myObject = new ObjectCreator("Parwinder");
console.log(myObject.returnMeaningOfLife()); // 42
console.log(myObject["#meaningOfLife"]); // undefined
console.log(myObject.#meaningOfLife); // SyntaxError
console.log(myObject.#returnAMessage); // SyntaxError

Язык обеспечивает соблюдение инкапсуляции. Это синтаксическая ошибка, чтобы ссылаться на # имена из не сферы масштаба. Государственные и частные области не конфликтуют. Мы можем иметь как частные области #meaningoflife, так и общественные области значения в одном классе.

🚨 # Метод объявления частных членов класса находится в части ES2019/ES10.

Защищенный

Как я уже сказал в начале этого поста, защищенный – самый сложный из всех 3 для реализации в JavaScript. Единственный способ, которым я могу подумать об этом, – это использовать класс, который имеет добычу для свойства без сеттера. Свойство будет только для чтения, и любой объект будет наследовать его от класса, но оно будет изменено только из самого класса.

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

class NameGenerator {
    _name;

    constructor(name) {
        this._name = name;
    }

    get name() {
        return this._name;
    }
}

let nameGenerator = new NameGenerator("John");
console.log(`My name is ${nameGenerator.name}`); // My name is John
nameGenerator.name = "Jane"; // Cannot assign to 'name' because it is a read-only property.

Оригинал: “https://dev.to/bhagatparwinder/classes-in-js-public-private-and-protected-1lok”