var Gallery = Backbone.Controller.extend({
_index: null,
_photos: null,
_album :null,
_subalbums:null,
_subphotos:null,
_data:null,
_photosview:null,
_currentsub:null,
routes: {
"": "index",
"subalbum/:id": "subindex",
"subalbum/:id/" : "directphoto",
"subalbum/:id/:num" : "hashphoto"
},
initialize: function(options) {
var ws = this;
if (this._index === null){
$.ajax({
url: 'data/album1.json',
dataType: 'json',
data: {},
success: function(data) {
ws._data = data;
ws._photos =
new PhotoCollection(data);
ws._index =
new IndexView({model: ws._photos});
Backbone.history.loadUrl();
}
});
return this;
}
return this;
},
//Handle rendering the initial view for the
//application
index: function() {
this._index.render();
},
Estoy leyendo un tutorial sobre backbone.js aquí: http://addyosmani.com/blog/building-spas-jquerys-best-friends/
¿Qué son los guiones bajos? (_index, _photos, _album) ¿Por qué utilizarlos?
javascript
oop
backbone.js
TIMEX
fuente
fuente
Respuestas:
Significa campos privados o métodos privados. Métodos que son solo para uso interno.
No deben invocarse fuera de la clase.
Los campos privados contienen datos para uso interno.
No deben leerse ni escribirse (directamente) desde fuera de la clase.
Nota: Es muy importante tener en cuenta que el simple hecho de agregar un guión bajo a una variable no la convierte en privada, es solo una convención de nomenclatura.
fuente
Hasta donde yo sé, generalmente se usa para indicar una variable privada (pero en realidad no proporciona ninguna privacidad, solo una convención).
Se trata brevemente aquí, aunque se desaconseja: http://javascript.crockford.com/code.html
fuente
myObj.getSmePromise().then( function(o) { do stuff } );
pero es difícil escribir en la consola de Chrome, por lomyObj._someValue
que asumí que el "código adecuado" en realidad no accederá a él; sin embargo, esto es con el lujo de que mis compañeros de trabajo también conozcan esta convención, si está escribiendo el próximo jQuery / lodash / angular / react o lo que sea, ¡no confiaría en que todos sus usuarios sepan o respeten esto!Cuando se usa como
_varname
fuera solo parte del nombre de las variables y no tiene ningún significado javascript. Los desarrolladores lo usan para indicar el significado o alcance de la variable. En este caso, parece que le está diciendo al desarrollador que esta variable debe ser una variable local o privada.Algunas cosas a tener en cuenta, en este ejemplo particular, el uso
_.varname
significaría una variable o función con la biblioteca underscore.js. También se podría usar_varname
para significar una variable que contiene un objeto de subrayado, de manera similar en nuestra oficina, usamos$varname
para significar una variable que contiene un objeto Jquery.fuente
Probablemente se use para marcar propiedades internas / privadas. Al igual que en Python, el prefijo de una variable con un guión bajo es una manera fácil de decirle a los desarrolladores que una variable es interna y que es mejor que no la manipulen (y si lo hacen, incluso una actualización menor de la biblioteca involucrada puede romper cosas).
fuente
Generalmente
_
se usa para decirle al usuario / programador que se trata de una variable privada / protegida en cuestión.fuente
Como se mencionó, es una práctica entre muchos desarrolladores, y una mala en eso. Si tiene que recurrir a convenciones como esta en sus métodos de programación, debe aprender el lenguaje, los métodos y los patrones antes de intentar usar el lenguaje. Si alguien no puede distinguir entre métodos públicos / privados en su código sin el uso del "guión bajo", entonces su habilidad de documentación es extremadamente deficiente. Muchos de los proyectos públicos en la web están muy mal documentados, por lo que probablemente la mayoría de los desarrolladores con poca formación "aceptaron" las convenciones de "subrayado", mientras que otros decidieron seguir la corriente en lugar de mantener los patrones y métodos de diseño formales. Hay una razón por la que no se escribió "subrayado" en las versiones ES6 / 7.
En un blog, me encontré recientemente con un gerente de ingeniería de software que dijo: " La convención de nomenclatura de subrayado hace que sea realmente fácil saber, de un vistazo, si una función variable está destinada a ser pública o privada ". Mi respuesta es: "Los comentarios son como imágenes, en este caso valen mil guiones bajos.
Existe una herramienta de documentación gratuita llamada Doxygen. Si bien no es compatible específicamente con JavaScript, puede generar documentación profesional para sus aplicaciones JavaScript cuando usa los prefijos de Doxygen en sus comentarios. Es realmente sencillo crear aplicaciones JavaScript con documentación, tanto para desarrolladores como para usuarios, cuando pones un poco de esfuerzo en los comentarios de tu código.
Recuerde, existen herramientas que pueden eliminar comentarios y declaraciones de consola para "Versiones de producción". Dicho esto, el uso de mapas de origen también es una pérdida de tiempo y de recursos. No minimice hasta que esté listo para publicar ... es decir, Dev Build (sin minificación, mantenga los comentarios y las declaraciones de la consola), Release Build (elimine los comentarios y las declaraciones de la consola y minimice la compilación del desarrollador. No es necesario volver a compilar la Dev Build cuando se publique código de calidad, solo prepárelo para su lanzamiento e impleméntelo).
fuente
Este es un pequeño apéndice. Como ya se respondió, estas son variables pseudoprivadas. Pero luego es posible escribir funciones pseudo públicas que accedan a estas variables privadas.
Me confundió el código de un colega que efectivamente tiene esto (pero enterrado muy profundamente en una biblioteca separada):
class x { constructor(id) {this._id = id} get id() {return this._id} } let y = new x(3)
Ahora tienes ambos
y.id
yy._id
eso funciona y devuelve el mismo valor. Pero si lo hacesconsole.log(y)
, solo aparece la_id
clave.fuente