Как мы все знаем, JavaScript - это самый неправильно понимаемый язык программирования в мире. Некоторые из нас считают, что - объекты не могут иметь частных переменных и методов экземпляра. Но это недоразумение. Объекты JavaScript могут иметь закрытые члены.

Объекты

По сути, JavaScript - это объекты. Массивы - это объекты. Функции - это объекты. Объекты есть объекты. Так что же такое предметы ???

Объекты - это коллекции пар имя-значение. Имена представляют собой строки, а значения - строки, числа, логические значения и объекты (включая массивы и функции). Объекты обычно реализуются в виде хэш-таблиц, поэтому значения могут быть получены быстро.

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

Итак, это хеш-таблицы, возвращающиеся к объектам -

Если значение является функцией, мы можем рассматривать его как метод. Когда вызывается метод объекта, переменная this присваивается объекту. Затем метод может получить доступ к переменным экземпляра через переменную this.

Объекты могут создаваться конструкторами, которые являются функциями, инициализирующими объекты. Конструкторы предоставляют функции, которые классы предоставляют на других языках, включая статические переменные и методы.

Общественные

Члены объекта - все публичные члены. Любая функция имеет доступ к этим публичным членам. Они могут добавлять, удалять или изменять этих участников.

есть два способа добавить членов в новый объект

  • конструктор
  • прототип

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

function Container(param) {
    this.member = param;
}

если мы построим новый объект = ›var myContainer = new Container (‘ abc ’);

then = ›myContainer.member содержит« abc ».

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

Container.prototype.f1 = function (string) {
    return this.member + string;
}

мы можем вызвать метод = ›myContainer.stamp (‘ def ’)

что даст результат = ›« abcdef »

Чтобы узнать больше… вы можете проверить мою другую историю на странице: Прототип Javascript https://medium.com/@gourav_m/javascript-prototypes-e61a9953447a

Частный

Закрытые члены создаются конструктором. Мы не можем получить доступ к этому вне объекта

function Container(param) {
    this.member = param;
    var privateMember1 = 3;
    var privateMember2 = this;
}

В этом конструкторе выше мы видим три члена частного экземпляра

  • парам
  • privateMember1
  • privateMember2

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

function Container(param) {

    function privateFunction() {
        if (privateMember1 > 0) {
            privateMember1 -= 1;
            return true;
        } else {
            return false;
        }
    }

    this.member = param;
    var privateMember1 = 3;
    var privateMember2 = this;
}

Если мы сделаем = ›var P1 = new Container (« abc »);

P1 будет содержать = ›

Это означает, что вы можете получить доступ только к переменной member объекта, и вы не можете получить доступ к param, privateFunction, privateMember1 и privateMember2, потому что они являются закрытыми членами. Но вы можете получить доступ к частным членам в частные функции.

Выкройки:

Общедоступно:

function Constructor(…) {
    this.membername = value;
}
Constructor.prototype.membername = value;

Личное:

function Constructor(...) {
     var that = this;
     var membername = value;
     function membername(...) {...}
}