2010-10-01 2 views
0

Я пытаюсь определить способ, которым я могу контролировать доступ к методам javascript, который мы используем на работе (Часть диска для улучшения стандартов кодирования).Частные функции в namespaced javascript

Образец, который я планировал использовать, был прекрасным, пока я не подумал о том, что мы делаем с сторонними скриптовыми методами.

Как я могу настроить свой код, чтобы разрешить доступ к частной функции из метода jQuery?

var NameSpace = new function() { 

    // My private function I want to access. 
    var privateFunction = function() { 

    }; 

    this.publicFunction = function() { 

     // I can access my private function here. 
     privateFunction(); 

     jQuery(window).resize(function() { 

      // But not here :(
      privateFunction(); 

     }); 
    }; 
}; 
+0

Зачем вы это делаете? –

+0

В каком смысле? Это эксперимент на самом деле. Было бы неплохо иметь более жесткий контроль над javscript, который мы производим. –

+0

Я не знаю, мне кажется контрпродуктивным добавить модификаторы доступа на язык, который обычно их не имеет. Люди рассчитывают на библиотеки JavaScript, чтобы их не было. –

ответ

10
// I can access my private function here. 
    privateFunction(); 
    jQuery(window).resize(function() { 
     // But not here :(
     privateFunction(); 
    }); 

Да вы можете. JavaScript статически ограничен. Вы можете получить доступ ко всем переменным и функциям каждой охватывающей области в этом обратном вызове изменения размера, включая privateFunction (если вы не затеняли его, указав privateFunction во вложенной области).

Что вы не можете сделать, это получить доступ к любой из этих локальных переменных вне закрывающей функции.

Я пытаюсь определить способ, которым я могу контролировать доступ к методам javascript, который мы используем на работе (часть диска для улучшения стандартов кодирования).

Я бы предположил, что это бессмысленное упражнение.

Пространство имен полезно для предотвращения нежелательных конфликтов имен. Для настоящих «частных» членов строго соблюдаются жесткие границы безопасности. Но это JavaScript: вы не используете код с разными уровнями доступа и песочницей, как на Java. Вам не нужно слепо воспроизводить модель безопасности Java в JavaScript. Кто здесь «нападавший»? Сам? Другие кодеры в вашей команде?

Скрытие и инкапсуляция данных - хорошая практика, но для достижения этой цели вам не нужно строго соблюдать конфиденциальность. Действительно, наличие настоящих рядовых может затруднить задачу отладки и прототипирования. Рассмотрим подход, похожий на Python, где вы просто отмечаете элементы, которые не должны использоваться извне, например, с помощью подчеркивания. Любой, кто использует псевдо-частный член, знает, что он делает то, чего не должен, и, надеюсь, у него есть временная временная причина.

+0

Спасибо за ввод. Очень признателен. –

Смежные вопросы