Частные функции в пространстве имен javascript - PullRequest
0 голосов
/ 01 октября 2010

Я пытаюсь определить способ, которым я могу контролировать доступ к методам для 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();

        });
    };
};

1 Ответ

10 голосов
/ 01 октября 2010
    // 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-подобный подход, в котором вы просто помечаете элементы, которые не должны использоваться извне, например, с подчеркиванием в начале.Любой, кто использует псевдо-приватный член, знает, что он делает то, что не должен, и, надеюсь, у него есть для этого временная причина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...