Préfixe de soulignement pour les noms de propriétés et de méthodes en JavaScript

Le préfixe de soulignement en JavaScript n'est-il qu'une convention, comme par exemple dans les méthodes de classe privée Python?

À partir de la documentation Python 2.7:

Variables d'instance"privées" qui impossible d'accéder sauf de l'intérieur un objet n'existe pas en Python. Cependant, il y a une convention qui est suivi par la plupart du code Python: un nom préfixé par un trait de soulignement (par exemple _spam) doit être traitée comme une partie non publique de L'API (que ce soit est une fonction, une méthode ou une donnée membre).

Cela s'applique-t-il également à JavaScript?

Prenez par exemple ce code JavaScript:

function AltTabPopup() {
    this._init();
}

AltTabPopup.prototype = {
    _init : function() {
        ...
    }
}

En outre, les variables préfixées de soulignement sont utilisées.

    ...
    this._currentApp = 0;
    this._currentWindow = -1;
    this._thumbnailTimeoutId = 0;
    this._motionTimeoutId = 0;
    ...

Seules les conventions? Ou y a-t-il plus derrière le préfixe de soulignement?


J'admets que ma question est assez similaire à cette question , mais cela n'a pas rendu plus intelligent la signification du préfixe de soulignement en JavaScript.

173
demandé sur Community 2010-12-19 21:27:12

6 réponses

Ce n'est qu'une convention. Le langage Javascript ne donne aucune signification particulière aux identificateurs commençant par des caractères de soulignement.

Cela dit, c'est une convention assez utile pour un langage qui ne supporte pas l'encapsulation hors de la boîte. Bien qu'il n'y ait aucun moyen d'empêcher quelqu'un d'abuser des implémentations de vos classes, au moins cela clarifie votre intention, et documente un comportement tel que wrong en premier lieu.

206
répondu Frédéric Hamidi 2010-12-21 23:17:04

JavaScript prend en charge l'encapsulation, grâce à une méthode qui implique masquer les membres dans les fermetures (Crockford). Cela dit, c'est parfois lourd, et la convention underscore est une très bonne convention à utiliser pour des choses qui sont en quelque sorte privées, mais que vous n'avez pas vraiment besoin de pour cacher.

86
répondu Zach 2010-12-21 23:29:47

JSDoc 3 vous permet d'annoter vos fonctions avec le @access private (précédemment la balise @private) qui est également utile pour diffuser votre intention à d'autres développeurs - http://usejsdoc.org/tags-access.html

13
répondu philrabin 2014-07-21 15:04:20

" seules les conventions? Ou y a-t-il plus derrière le préfixe de soulignement?"

En dehors des conventions de confidentialité, je voulais aussi aider à faire prendre conscience que le préfixe de soulignement est également utilisé pour les arguments qui dépendent d'arguments indépendants, en particulier dans les cartes d'ancrage URI. Les clés dépendantes pointent toujours vers une carte.

Exemple ( à partir de https://github.com/mmikowski/urianchor ) :

$.uriAnchor.setAnchor({ page : 'profil', _page : { uname "wendy", en ligne : "aujourd'hui" } });

L'ancre de L'URI dans le champ de recherche du navigateur est remplacée par:

#!page=profil:uname,wendy|en ligne,aujourd'hui

C'est une convention utilisée pour piloter un État d'application basé sur des modifications de hachage.

8
répondu Sam Araiza 2014-08-26 18:52:37

import/export fait maintenant le travail avec ES6. J'ai toujours tendance à préfixer les fonctions non exportées avec _ si la plupart de mes fonctions sont exportées.

Si vous exportez uniquement une classe (comme dans les projets angulaires), ce n'est pas nécessaire du tout.

3
répondu Nicolas Zozol 2017-03-24 08:25:41

Il convient de souligner qu'il existe une bibliothèque JS appelée underscore. Lors de l'utilisation de cette bibliothèque, le préfixe _ a une signification.

Http://underscorejs.org/

-3
répondu fred 2016-12-21 17:26:52