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();
},
Ich lese hier ein Tutorial auf backbone.js: http://addyosmani.com/blog/building-spas-jquerys-best-friends/
Was sind die Unterstriche? (_index, _photos, _album) Warum sie verwenden?
javascript
oop
backbone.js
TIMEX
quelle
quelle
Antworten:
Es bedeutet private Felder oder private Methoden. Methoden, die nur für den internen Gebrauch bestimmt sind.
Sie sollten nicht außerhalb der Klasse aufgerufen werden.
Private Felder enthalten Daten für den internen Gebrauch.
Sie sollten nicht (direkt) von außerhalb der Klasse gelesen oder geschrieben werden.
Hinweis: Es ist sehr wichtig zu beachten, dass das Hinzufügen eines Unterstrichs zu einer Variablen diese nicht privat macht, sondern nur eine Namenskonvention ist.
quelle
Soweit mir bekannt ist, wird es im Allgemeinen verwendet, um eine private Variable anzugeben (bietet jedoch keine Privatsphäre, sondern nur eine Konvention).
Es wird hier kurz besprochen, obwohl davon abgeraten wird: http://javascript.crockford.com/code.html
quelle
myObj.getSmePromise().then( function(o) { do stuff } );
aber das ist ein Problem, das an der Chrome-Konsole eingegeben werden muss. Daher habe ich mir vorgenommenmyObj._someValue
, dass "richtiger Code" nicht wirklich darauf zugreift - dies ist jedoch bei Der Luxus meiner Mitarbeiter, diese Konvention auch zu kennen, wenn Sie die nächste jQuery / lodash / angle / react schreiben oder was auch immer, ich würde mich nicht darauf verlassen, dass alle Ihre Benutzer dies wissen oder respektieren!Bei Verwendung wird
_varname
es nur als Teil des Variablennamens verwendet und hat keine Javascript-Bedeutung. Entwickler verwenden es, um die Bedeutung oder den Umfang der Variablen zu kennzeichnen. In diesem Fall sieht es so aus, als würde der Entwickler erfahren, dass diese Variable eine lokale oder private Variable sein soll.Ein paar Dinge zu beachten, in diesem speziellen Beispiel
_.varname
würde die Verwendung einer Variablen oder Funktion mit der Bibliothek underscore.js bedeuten. Man könnte auch_varname
eine Variable kennzeichnen, die ein Unterstrichobjekt enthält, ähnlich wie in unserem Büro$varname
eine Variable, die ein Jquery-Objekt enthält.quelle
Es wird wahrscheinlich verwendet, um interne / private Eigenschaften zu markieren. Genau wie in Python ist das Präfixieren einer Variablen mit einem Unterstrich eine einfache Möglichkeit, Entwicklern mitzuteilen, dass eine Variable intern ist, und sie sollten sie besser nicht manipulieren (und wenn sie dies tun, kann sogar ein geringfügiges Update der beteiligten Bibliothek zu Problemen führen).
quelle
Wird normalerweise
_
verwendet, um dem Benutzer / Programmierer mitzuteilen, dass es sich um eine private / geschützte Variable handelt.quelle
Wie bereits erwähnt, ist dies bei vielen Entwicklern eine schlechte Praxis. Wenn Sie bei Ihren Programmiermethoden auf solche Konventionen zurückgreifen müssen, sollten Sie die Sprache, Methoden und Muster lernen, bevor Sie versuchen, die Sprache zu verwenden. Wenn jemand in Ihrem Code nicht zwischen öffentlichen und privaten Methoden unterscheiden kann, ohne den "Unterstrich" zu verwenden, fehlt es Ihnen an Dokumentationsfähigkeiten. Viele der öffentlichen Projekte im Internet sind sehr schlecht dokumentiert, weshalb die "Unterstrich" -Konventionen wahrscheinlich von den meisten untergebildeten Entwicklern "akzeptiert" wurden, während andere beschlossen, mit dem Fluss zu gehen, anstatt die formalen Entwurfsmuster und -methoden beizubehalten. Es gibt einen Grund, warum "Unterstrich" nicht in ES6 / 7-Versionen geschrieben wurde.
In einem Blog bin ich kürzlich auf einen Software Engineer Manager gestoßen, der erklärte: " Die Unterstrich-Namenskonvention macht es wirklich einfach, auf einen Blick zu erkennen, ob eine variable Funktion öffentlich oder privat sein soll. " Meine Antwort lautet: "Kommentare sind wie Bilder, in diesem Fall sind sie tausend Unterstriche wert.
Es gibt ein kostenloses Dokumentationswerkzeug namens Doxygen. JavaScript wird zwar nicht speziell unterstützt, es kann jedoch eine professionelle Dokumentation für Ihre JavaScript-Anwendungen erstellen, wenn Sie in Ihren Kommentaren Doxygen-Präfixe verwenden. Es ist wirklich einfach, JavaScript-Anwendungen mit Dokumentation zu erstellen, sowohl für Entwickler als auch für Benutzer, wenn Sie ein wenig Aufwand in Ihre Codekommentare investieren.
Denken Sie daran, dass es Tools gibt, mit denen Kommentare und Konsolenanweisungen für "Produktionsversionen" entfernt werden können. Allerdings ist die Verwendung von Quellkarten auch eine Verschwendung von Zeit und Ressourcen. Minimieren Sie nicht, bis Sie zur Veröffentlichung bereit sind. Dh Dev Build (keine Minimierung, behalten Sie Kommentare und Konsolenanweisungen bei), Release Build (entfernen Sie Kommentare und Konsolenanweisungen und minimieren Sie den Dev Build. Sie müssen den Dev Build bei seiner Veröffentlichung nicht neu kompilieren Qualitätscode, bereiten Sie ihn einfach für die Veröffentlichung vor und stellen Sie ihn bereit).
quelle
Dies ist ein kleiner Nachtrag. Wie bereits beantwortet, handelt es sich um pseudo-private Variablen. Es ist dann aber möglich, pseudo-öffentliche Funktionen zu schreiben, die auf diese privaten Variablen zugreifen.
Ich wurde durch einen Kollegencode verwirrt, der dies effektiv hat (aber sehr tief in einer separaten Bibliothek vergraben ist):
Jetzt haben Sie beide
y.id
undy._id
diese Arbeit und geben den gleichen Wert zurück. Wenn Sie dies tunconsole.log(y)
, wird nur der_id
Schlüssel angezeigt.quelle