Крокфорд объяснение частной собственности - PullRequest
1 голос
/ 13 декабря 2010

Я прочитал это: частные переменные Javascript с сайта Крокфорда

, но у меня есть некоторое недоумение в его терминологии:

здесь он говорит:

Все члены объекта являются открытыми.`this.membername = value;

после:

Закрытые переменные недоступны извне и не доступны для собственных открытых методов объекта.

и затем:

Привилегированный метод может обращаться к закрытым переменным и методам и сам по себе доступен для открытых методов и извне

Таким образом, кажется, что привилегированные методы отличаются от открытых методов, но если я это сделаю:

function S()
{
   var a = 11; // PRIVATE
   this.get = function() { return a; }; // PUBLIC AND PRIVILEGED???
}

new S().get();

, там get метод - это открытый метод, а также привилегированный метод ... поэтому, когда он говорит публичные методыне может получить доступ к приватному члену, о чем он?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 13 декабря 2010

Единственный способ, которым get может получить доступ к a, - это закрытие, что делает его привилегированным методом. Является ли он общедоступным или нет, не имеет ничего общего с тем фактом, что он имеет привилегию.

1 голос
/ 13 декабря 2010

Чтобы конкретно ответить на ваш вопрос о публичных методах, так как вы, кажется, понимаете идею привилегированных, рассмотрите на своем примере:

S.prototype.something = function ...

Это будет публично, но не привилегировано, так как не может получить доступ кприватная переменная a

0 голосов
/ 13 декабря 2010

То, что вы можете получить значение a, которое является частным членом S, не означает, что вы можете "получить доступ" a. Например, вы не можете изменить значение a, если для этого не предусмотрен метод, например set. Вам предоставляется метод (интерфейс, если вы можете) get, который "превалирует", чтобы получить значение a, которое является частным членом S.

...