¿El prefijo de subrayado en JavaScript es solo una convención, como por ejemplo en Python los métodos de clase privada son?
De la documentación de 2.7 Python:
Las variables de instancia "privadas" a las que no se puede acceder, excepto desde dentro de un objeto, no existen en Python. Sin embargo, hay una convención seguida por la mayoría del código de Python: un nombre con un guión bajo (por ejemplo, _spam) debe tratarse como una parte no pública de la API (ya sea una función, un método o un miembro de datos) .
¿Esto también se aplica a JavaScript?
Tome por ejemplo este código JavaScript:
function AltTabPopup() {
this._init();
}
AltTabPopup.prototype = {
_init : function() {
...
}
}
Además, se utilizan las variables prefijadas de subrayado.
...
this._currentApp = 0;
this._currentWindow = -1;
this._thumbnailTimeoutId = 0;
this._motionTimeoutId = 0;
...
¿Solo convenciones? ¿O hay más detrás del prefijo de subrayado?
Admito que mi pregunta es bastante similar a esta pregunta , pero no lo hizo más inteligente sobre la importancia del prefijo de subrayado en JavaScript.
fuente
Respuestas:
¡Bienvenido a 2019!
Parece que se aceptó una propuesta para extender la sintaxis de clase para permitir que la
#
variable prefijada sea privada. Chrome 74 se envía con este soporte._
Los nombres de las variables prefijadas se consideran privados por convención, pero siguen siendo públicos.Ver https://caniuse.com/#feat=mdn-javascript_classes_private_class_fields
fuente
Eso es solo una convención. El lenguaje Javascript no otorga ningún significado especial a los identificadores que comienzan con caracteres de subrayado.
Dicho esto, es una convención bastante útil para un lenguaje que no admite la encapsulación lista para usar. Aunque no hay forma de evitar que alguien abuse de las implementaciones de sus clases, al menos aclara su intención y documenta tales comportamientos como incorrectos en primer lugar.
fuente
_
me encantaría saber qué está pasando! ¿Por qué no es en suthis.name
lugar?console.log(someone._name = "Jean Dupont");
funciona tan bien comoconsole.log(someone.name);
, y asigna y evalúa el miembro con guión bajo de la propiedad. Como puede ver , no hay una encapsulación garantizada a través de guiones bajos :)JavaScript en realidad admite la encapsulación, a través de un método que consiste en ocultar miembros en cierres (Crockford). Dicho esto, a veces es engorroso, y la convención de subrayado es una convención bastante buena para usar en cosas que son algo privadas, pero que en realidad no necesitas ocultar.
fuente
JSDoc 3 le permite anotar sus funciones con
@access private
(anteriormente la@private
etiqueta) que también es útil para transmitir su intención a otros desarrolladores: http://usejsdoc.org/tags-access.htmlfuente
Además de las convenciones de privacidad, también quería ayudar a crear conciencia de que el prefijo de subrayado también se usa para argumentos que dependen de argumentos independientes, específicamente en los mapas de anclaje de URI. Las teclas dependientes siempre apuntan a un mapa.
Ejemplo (de https://github.com/mmikowski/urianchor ):
El ancla URI en el campo de búsqueda del navegador se cambia a:
Esta es una convención utilizada para controlar el estado de una aplicación basada en cambios hash.
fuente
import/export
ahora está haciendo el trabajo con ES6. Todavía tiendo a prefijar funciones no exportadas con_
si la mayoría de mis funciones se exportan.Si exporta solo una clase (como en proyectos angulares), no es necesario en absoluto.
fuente