Кто-нибудь, подскажите, пожалуйста, я не очень понимаю, зачем использовать замыкание для инкапсуляции:
Решил проверить, что пример с sayPrevedToHabrahabr действительно помогает инкапсулировать методы и свойства MyModule.
Для этого создал функцию:
function MyModule() {
var name = 'Habrahabr';
function sayPreved() {
alert('PREVED ' + name.toUpperCase());
}
this.sayPrevedToHabrahabr = function() {
sayPreved(name);
};
};
Далее создал объект
var myModule = new MyModule();
и попробовал обратиться к его локальным переменным и методам:
document.writeln(myModule.name); // undefined
document.writeln(myModule.sayPreved()); // Uncaught TypeError: undefined is not a function on line 15
Может быть, локальная функция создалась в глобальной области видимости?
попробовал sayPreved(), но это так же падает с ошибкой.
Зачем же в таком случае использовать замыкания для инкапсуляции данных, если последние и так недоступны из вне?
Возможно, способов организации несколько:
1) Самый простой, когда администратор системы — одна роль с полным набором прав, при этом разрешений permission на разные группы объектов несколько. Тогда у каждого из администраторов необходимо забрать ненужные разрешения removed_permission_user_asgmt . Такой способ подходит, к огда администраторов немного.
2) Когда в рамках разных групп объектов создается своя роль «администратора группы объектов». При этом пользователям-администраторам будет назначаться общая для групп роль «администратор». Таким образом, каждый из них будет обладать администраторскими разрешениями, но выдавать права только в рамках свой группы.
Уверен, что на этих двух вариантах количество способов не ограничивается.
Данная реализация оставляет гораздо больший простор для действий, например, для того же логирования классическая модель уже не подходит, иначе как автоматизированно отслеживать, какое действие совершил пользователь? Или как в рамках классической модели хранить данные о 2х пользователях с одной и той же ролью, которые могут взаимодействовать с множеством ресурсов, при этом один из пользователей не имеет доступа к одному из ресурсов? Только созданием второй роли, почти полностью эквивалентной первой.
Решил проверить, что пример с sayPrevedToHabrahabr действительно помогает инкапсулировать методы и свойства MyModule.
Для этого создал функцию:
Далее создал объект
и попробовал обратиться к его локальным переменным и методам:
Может быть, локальная функция создалась в глобальной области видимости?
попробовал sayPreved(), но это так же падает с ошибкой.
Зачем же в таком случае использовать замыкания для инкапсуляции данных, если последние и так недоступны из вне?
1) Самый простой, когда администратор системы — одна роль с полным набором прав, при этом разрешений permission на разные группы объектов несколько. Тогда у каждого из администраторов необходимо забрать ненужные разрешения removed_permission_user_asgmt . Такой способ подходит, к огда администраторов немного.
2) Когда в рамках разных групп объектов создается своя роль «администратора группы объектов». При этом пользователям-администраторам будет назначаться общая для групп роль «администратор». Таким образом, каждый из них будет обладать администраторскими разрешениями, но выдавать права только в рамках свой группы.
Уверен, что на этих двух вариантах количество способов не ограничивается.