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();
},
Estou lendo um tutorial sobre backbone.js aqui: http://addyosmani.com/blog/building-spas-jquerys-best-friends/
Quais são os sublinhados? (_index, _photos, _album) Por que usá-los?
javascript
oop
backbone.js
TIMEX
fonte
fonte
Respostas:
Significa campos privados ou métodos privados. Métodos que são apenas para uso interno.
Eles não devem ser invocados fora da classe.
Os campos privados contêm dados para uso interno.
Eles não devem ser lidos ou escritos (diretamente) de fora da classe.
Observação: é muito importante observar que apenas adicionar um sublinhado a uma variável não a torna privada, é apenas uma convenção de nomenclatura.
fonte
Pelo que eu sei, geralmente é usado para indicar uma variável privada (mas não fornece nenhuma privacidade, apenas uma convenção).
Isso é discutido brevemente aqui, embora seja desaconselhado: http://javascript.crockford.com/code.html
fonte
myObj.getSmePromise().then( function(o) { do stuff } );
mas é uma dor de digitar no console do Chrome, portanto, partimyObj._someValue
do pressuposto de que o "código adequado" não vai realmente acessá-lo - isto é, no entanto, com o luxo de meus colegas de trabalho também conhecerem essa convenção, se você estiver escrevendo o próximo jQuery / lodash / angular / react ou o que quer que seja, eu não confiaria em todos os seus usuários sabendo ou respeitando isso!Quando usado como
_varname
se fosse apenas parte do nome da variável, não tem significado javascript. Os desenvolvedores usam para significar o significado ou escopo da variável. Nesse caso, parece que está informando ao desenvolvedor que essa variável deve ser local ou privada.Algumas coisas a serem observadas, neste exemplo específico, usar
_.varname
significaria uma variável ou função com a biblioteca de sublinhado.js. Também pode-se usar_varname
para significar uma variável contendo um objeto de sublinhado, da mesma forma que em nosso escritório, usamos$varname
para significar uma variável contendo um objeto Jquery.fonte
Provavelmente é usado para marcar propriedades internas / privadas. Assim como em Python, prefixar uma variável com um sublinhado é uma maneira fácil de dizer aos desenvolvedores que uma variável é interna e é melhor eles não mexerem nela (e se o fizerem, mesmo uma pequena atualização da biblioteca envolvida pode quebrar as coisas).
fonte
Normalmente
_
é usado para informar ao usuário / programador que se trata de uma variável privada / protegida.fonte
Como mencionado, é uma prática entre muitos desenvolvedores, uma prática ruim nisso. Se você tiver que recorrer a convenções como essa em seus métodos de programação, deverá aprender a linguagem, os métodos e os padrões antes de tentar usar a linguagem. Se alguém não consegue distinguir entre métodos públicos / privados em seu código sem o uso do "sublinhado", então sua habilidade de documentação é extremamente deficiente. Muitos dos projetos públicos na web são muito mal documentados, o que provavelmente é o motivo pelo qual as convenções de "sublinhado" foram "aceitas" pela maioria dos desenvolvedores pouco instruídos, enquanto outros decidiram seguir o fluxo em vez de manter os padrões e métodos de design formais. Há uma razão pela qual "sublinhado" não foi escrito nas versões ES6 / 7.
Em um blog, encontrei recentemente um Gerente de Engenharia de Software que declarou: " A convenção de nomenclatura de sublinhado torna realmente fácil saber, à primeira vista, se uma função de variável deve ser pública ou privada. ". Minha resposta é: "Os comentários são como fotos, neste caso valem mil sublinhados.
Existe uma ferramenta de documentação gratuita chamada Doxygen. Embora não suporte especificamente JavaScript, ele pode gerar documentação profissional para seus aplicativos JavaScript quando você usa o prefixo Doxygen em seus comentários. É realmente simples criar aplicativos JavaScript com documentação, tanto para desenvolvedores quanto para usuários, quando você se esforça um pouco nos comentários do código.
Lembre-se de que existem ferramentas que podem remover comentários e declarações de console para "Lançamentos de produção". Dito isso, o uso de mapas de origem é uma perda de tempo e recursos também. Não diminua até que esteja pronto para publicar .. ex. Dev Build (sem minificação, manter comentários e instruções do console), Release Build (remover comentários e instruções do console e minificar o Dev Build. Não há necessidade de recompilar o Dev Build quando for lançado código de qualidade, basta prepará-lo para lançamento e implantá-lo).
fonte
Este é um pequeno adendo. Como já respondido, essas são variáveis pseudo-privadas. Mas então é possível escrever funções pseudo-públicas que acessam essas variáveis privadas.
Fiquei confuso com o código de um colega que efetivamente tem isso (mas enterrado bem fundo em uma biblioteca separada):
class x { constructor(id) {this._id = id} get id() {return this._id} } let y = new x(3)
Agora você tem ambos
y.id
ey._id
esse trabalho e retorna o mesmo valor. Mas se você fizerconsole.log(y)
isso, apenas aparecerá a_id
chave.fonte