Вступ до інкапсуляції в JavaScript

JavaScript - це міцна об'єктно-орієнтована мова сценаріїв, яка здатна будувати складні програми як на клієнті, так і на сервер. Однак чим вища складність у впровадженні, тим потрібен кращий технічний і гнучкий код для вирішення ситуації. Інкапсуляція, один із принципів об'єктно-орієнтованого програмування, є ключовим для досягнення таких цілей.

За визначенням, інкапсуляція в JavaScript - це процес зв'язування даних із функціями, які діють на дані. Інкапсуляція дозволяє контролювати та перевіряти дані. У JavaScript змінні нагадують дані.

Інкапсуляція означає приховування інформації, тобто ідею про те, що внутрішні об'єкти об'єкта не повинні бути прямо голими як державні утворення. Це допоможе обмежити несанкціоноване використання змінних. Натомість, якщо абоненти хочуть досягти визначеного результату, він повинен використовувати публічний метод або публічні особи всередині об'єкта для доступу до приватних змінних об'єкта.

Робота інкапсуляції в JavaScript

Візьмемо просту проблему, коли об’єкт «співробітник» містить два атрибута атрибута «ім’я».

var employee = (
name : "Aditya Chaturvedi",
);
alert(employee.name); // Aditya Chaturvedi
employee.name = "Rahul Khanna";
alert(employee.name); // Rahul Khanna

У наведеному прикладі все виглядає добре. Ми створили об’єкт, надрукували його значення атрибута та змінили його. Але проблема, схоже, виникає, коли якийсь користувач намагається встановити ціле значення атрибуту імені.

employee.name = "Amit Trivedi";
alert(employee.name); // Amit Trivedi

Що стосується JavaScript, то це повністю законно, оскільки в JavaScript змінна може приймати будь-який тип, який їй надається. Для того, щоб виправити це, нам потрібно встановити діапазон дійсних символів, який можна встановити на ім’я атрибута об'єкта. Ці перевірки не можуть працювати, якщо абонент може отримати доступ та змінити значення цих даних. Просте рішення для цього було б

var employee = (
name : "Aditya Chaturvedi",
setName : function (value) (
var exp = new RegExp(/\d+/);
if( exp.test(value) ) (
alert("Invalid Name");
)
else (
this.name = value;
)
),
"getName" : function() (
return this.name;
)
);
alert( employee.getName() ); // Aditya Chaturvedi
employee.setName( "Rahul Khanna" );
alert( employee.getName() ); // Rahul Khanna
employee.setName( 42 ); // Invalid Name
alert( employee.getName() ); // Rahul Khanna

Наведений вище приклад застосовує перевірку, але все ж має деякі помилки, як якщо користувач безпосередньо отримує ім'я, він все одно може його змінити.

employee.setName( 42 ); // Invalid Name; Here name won't be changed.
employee.name = 42; // No validation happens and the name is changed
alert( employee.getName() ); // 42 is printed.

Кінцевою метою тут є те, що ім'я змінної не повинно бути доступним у всьому світі з об'єктом "співробітник". Інкапсуляція допомагає це вирішити. Це можна вирішити за допомогою понять Функція Область застосування та Закриття.

1. Сфера застосування

Будь-яка Змінна, записана всередині кодового блоку функцій, залишається прихованою ззовні.

function fnScope()
(
var fnVar = "Hi!";
alert( fnVar ) // "Hi!";
)
alert( fnVar ) // error; fnVar is not accessible outside the function.

Отже, якщо ми перемістимо змінну “name” всередині функції “setName”, то абоненти не зможуть отримати доступ до неї безпосередньо. Але це непросто безпосередньо ввести змінну "ім'я" всередині функції "setName", оскільки змінна всередині функціонального блоку не може бути використана поза її рамками, отже, ім'я не буде доступним для методу "getName". У цьому допоможе закриття.

2. Закриття

Коли дві функції поєднуються разом із посиланнями на їхній оточуючий стан або лексичне середовище називається закриттям. Простими словами, закриття надає доступ до локальної змінної функції, яка повинна використовуватися іншою функцією всередині батьківської функції. Тут ми маємо ім’я змінної, що ховається всередині функції setName від зовнішнього світу. Але внутрішній об'єкт (myObj) може отримати доступ до нього:

var employee = function () (
var name = "Aditya Chaturvedi";
var exp = new RegExp(/\d+/);
var myObj = (
setName : function (value) (
if( exp.test(value) ) (
alert("invalid name");
)
else (
name = value; // The object has access to "name"
)
),
getName : function () (
return name; // The object has access to "name"
)
); // End of the Object
);
employee.getName(); // doesn't work!

Тепер ми використали концепцію закриття, до внутрішнього об'єкта myObj можна отримати доступ обома функціями. Але все-таки є помилка доступу до внутрішнього об’єкта. Вище ми бачили, що службовець.getName не може бути використаний, ані службовий.myObj.getName не може бути використаний, оскільки myObj також є приватним для функції, а до приватних змінних не можна отримати доступ як зовні. Отже, нам потрібно повертати внутрішній об'єкт кожного разу, коли викликається анонімна функція та призначати її зовнішній змінній.

var employee = function () (
var name = "Aditya Chaturvedi";
var exp = new RegExp(/\d+/);
return (
setName : function (value) (
if( exp.test(value) ) (
alert("Invalid Name");
)
else (
name = value;
)
),
getName : function () (
return name;
)
); // end of the return
)(); // Note this '()' means we're calling the function
// and assigning the returned value to the variable employee
alert(employee.getName()); // Aditya Chaturvedi
employee.setName( "Rahul Khanna" );
alert(employee.getName()); // Rahul Khanna
employee.setName( 42 ); // Invalid Name; the name does'nt changes.
employee.name = 42; // Doesn't affect the private fullName variable.
alert(employee.getName()); // Rahul Khanna is printed again.

Переваги інкапсуляції в JavaScript

Основна перевага використання інкапсуляції в JavaScript - забезпечення безпеки даних. Інші переваги капсулювання включають:

  • Інкапсуляція захищає об'єкт від незаконного доступу.
  • Інкапсуляція допомагає досягти рівня, не розкриваючи його складних деталей.
  • Це зменшить людські помилки.
  • Зробіть додаток більш гнучким та керованим.
  • Спрощує додаток.

Висновок

Інкапсуляція - це інструмент у JavaScript, який може бути використаний для того, щоб зробити складну операцію легкою та керованою, зробивши загальну програму безпечною та простою в роботі.

Рекомендовані статті

Це посібник з інкапсуляції в JavaScript. Тут ми обговорюємо роботу інкапсуляції в JavaScript разом з концепціями та перевагами. Ви також можете переглянути наступні статті, щоб дізнатися більше -

  1. Особливості JavaScript (коментарі)
  2. Масиви в JavaScript - типи та методи
  3. Інструменти JavaScript
  4. Для циклу в JavaScript (робочий процес)
  5. Змінні в JavaScript
  6. Типи та помилки обробки в JavaScript
  7. Функції Regex в Python (приклад)
  8. Приклади коментарів у PHP