2010-06-18 4 views
5

J'apprends le JavaScript, et je ne comprends pas pourquoi vous feriez des méthodes qui ne sont pas «privilégiées», c'est-à-dire qui ne sont pas définies dans le constructeur mais plutôt dans le prototype de la classe.pourquoi faire des méthodes non-privilégiées?

Je comprends l'idée de l'encapsulation et tout, mais vous n'encapsulez jamais des parties d'une classe dans le reste du monde OO.

Répondre

18

Lorsqu'une fonction est définie dans un constructeur, une nouvelle instance de cette fonction est créée chaque fois que le constructeur est appelé. Il a également accès à des variables privées. Lorsqu'une fonction est définie sur le prototype, la fonction est créée une seule fois et l'instance unique de cette fonction est partagée. Par conséquent, la définition d'une fonction sur le prototype produit moins d'objets, ce qui peut vous donner de meilleures performances. D'un autre côté, les méthodes publiques n'ont pas accès aux variables privées. D'autres exemples et le raisonnement sont disponibles ici: http://www.crockford.com/javascript/private.html

+0

@aharon: Juste au cas: soyez prudent pour l'utilisation de ['this'] (http://blog.niftysnippets.org/2008/04/you-must-remember -ce.html). –

+0

J'ai mis à jour ma réponse pour faire la différence entre public, privé et privilégié plus clair. – Greg

Questions connexes