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

Общественная собственность

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

function Person(name) {
  this.name = name; // Public property
}

var john = new Person("John");
console.log(john.name); // Output: John

В этом примере мы определили объект Person с общедоступным свойством name. Свойство name доступно вне объекта с помощью записи через точку.

Частная собственность

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

function Person(name, age) {
  const ageLimit = 18; // Private property
  let isAdult = age >= ageLimit; // Private property

  this.name = name; // Public property

  this.isAdult = function() {
    return isAdult;
  }
}

var john = new Person("John", 25);
console.log(john.isAdult()); // Output: true
console.log(john.ageLimit); // Output: undefined

В этом примере мы определили объект Person с частными свойствами ageLimit и isAdult. Свойство ageLimit — это константа, которую нельзя изменить вне объекта. Свойство isAdult — это логическое значение, которое вычисляется на основе свойства age, переданного в конструктор. Свойство isAdult доступно вне объекта с помощью общедоступного метода.

Защищенные свойства

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

function Animal() {
  this._legs = 4; // Protected property
}

function Dog() {
  Animal.call(this); // Inherit Animal properties

  this.bark = function() {
    console.log("Woof!");
  }
}

var fido = new Dog();
console.log(fido._legs); // Output: 4

В этом примере мы определили объект Animal с защищенным свойством _legs. Объект Dog наследует свойство _legs от объекта Animal с помощью метода call(). Свойство _legs доступно внутри объекта Dog и его потомков, но не вне объекта.

В заключение, понимание различий между общедоступными, частными и защищенными свойствами в JavaScript имеет решающее значение для написания безопасного и эффективного кода. Общедоступные свойства доступны за пределами объекта, частные свойства — нет, а защищенные свойства доступны только объекту и его потомкам. Эффективно используя эти типы свойств, разработчики могут создавать гибкие и безопасные объекты.