Введение в инкапсуляцию в 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.

Конечной целью здесь является то, что имя переменной не должно быть доступно глобально с объектом «сотрудник». Инкапсуляция помогает этому. Это можно решить с помощью концепций Function Scope и Closures.

1. Область действия функции

Любая переменная, которая записана внутри блока кода функций, остается скрытой снаружи.

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

Следовательно, если мы переместим переменную «name» внутри функции «setName», то вызывающие не смогут получить к ней доступ напрямую. Но нелегко напрямую поместить переменную «name» в функцию «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 доступен для обеих функций. Но все же есть ошибка доступа к внутреннему объекту. Выше мы видели, что employee.getName не может использоваться, ни employee.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. Функции регулярных выражений в Python (пример)
  8. Примеры комментариев в PHP