2010-12-13 7 views
1

Je lis ceci: private Javascript variables à partir du site Crockfordexplication Crockford des propriétés privées

mais j'ai quelques perplexités sur sa terminologie:

ici il dit:

Les membres d'un objet sont membres du public `this.membername = valeur;

après:

Les variables privées ne sont pas accessibles à l'extérieur, ils ne sont pas accessibles aux propres publics méthodes de l'objet.

puis:

Une méthode privilégiée est en mesure d'accéder les variables et les méthodes privées et lui-même est accessible aux publiques les méthodes et l'extérieur

Il semble que les méthodes privilégiées sont différentes des méthodes publiques, mais si je le fais:

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

new S().get(); 

il get méthode est une méthode publique et aussi une méthode privilégiée ... alors quand il dit que les méthodes publiques ne peuvent pas accéder au membre privé ce qui est-il?

Merci.

Répondre

3

La seule façon que get est en mesure d'accéder a est à travers la fermeture, ce qui en fait effectivement une méthode privilégiée. Que ce soit public ou non n'a rien à voir avec le fait qu'il est privilégié.

+0

mais qui sont les méthodes publiques qui ne peuvent pas accéder à privé? Vraiment je ne vois pas ça, si on dit qu'une méthode privilégiée est une façon de dire qu'on accède à une variable privée par une méthode publique !! – xdevel2000

0

Que vous pouvez obtenir la valeur de a qui est un membre privé de S ne signifie pas que vous pouvez "accéder" a. Par exemple, vous ne pouvez pas modifier la valeur de a sauf si une méthode, telle que set, est fournie pour cela. On vous donne une méthode (une interface, si vous le pouvez) get qui est "prévilé" pour obtenir la valeur de a qui est un membre privé de S.

1

Pour répondre spécifiquement à votre question sur les méthodes publiques, puisque vous semblez comprendre l'idée de privilaged, tenez compte de votre exemple:

S.prototype.something = function ... 

Ce serait public, mais pas privilaged car il ne peut pas accéder à la variable privée a

Questions connexes