web-dev-qa-db-ger.com

Was bedeutet dieser Unterstrich in Javascript?

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?

77
TIMEX

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 zur internen Verwendung.

Sie sollten nicht (direkt) von außerhalb der Klasse gelesen oder geschrieben werden.

Es ist sehr wichtig anzumerken, dass das Hinzufügen eines Unterstrichs zu einer Variablen sie nicht privat macht, sondern nur eine Namenskonvention ist.

142
DrStrangeLove

Soweit ich informiert bin, wird sie normalerweise verwendet, um eine private Variable anzugeben (sie bietet jedoch keine Privatsphäre, nur eine Konvention).

Hier wird kurz diskutiert, obwohl davon abgeraten wird: http://javascript.crockford.com/code.html

21
oli

Wenn es wie _varname verwendet wird, ist es nur ein Teil des Variablennamens und hat keine Javascript-Bedeutung. Entwickler verwenden es, um die Bedeutung oder den Umfang der Variablen anzugeben. In diesem Fall sieht es so aus, als würde der Entwickler sagen, dass diese Variable eine lokale oder private Variable sein sollte. 

Ein paar Dinge zu beachten: In diesem speziellen Beispiel würde _.varname eine Variable oder Funktion mit der Bibliothek undererscore.js bezeichnen. Man könnte auch _varname verwenden, um eine Variable zu kennzeichnen, die ein Unterstrichobjekt enthält. Ähnlich wie in unserem Büro verwenden wir $varname, um eine Variable zu kennzeichnen, die ein Jquery-Objekt enthält.

8
Ryan Gibbons

Es wird wahrscheinlich verwendet, um interne/private Eigenschaften zu kennzeichnen. Genau wie in Python ist das Voranstellen einer Variable mit einem Unterstrich eine einfache Möglichkeit, den Entwicklern mitzuteilen, dass eine Variable intern ist und besser nicht manipuliert wird (und wenn sie dies tun, kann sogar ein geringfügiges Update der beteiligten Bibliothek zu Fehlern führen).

4
ThiefMaster

Normalerweise wird _ verwendet, um dem Benutzer/Programmierer mitzuteilen, dass es sich um eine private/geschützte Variable handelt.

2
Jan Dragsbaek

Dies ist ein kleiner Nachtrag. Wie bereits beantwortet, handelt es sich hierbei um Pseudo-Private-Variablen. Dann ist es jedoch möglich, pseudo-public-Funktionen zu schreiben, die auf diese privaten Variablen zugreifen.

Ich wurde von einem Kollegen-Code verwirrt, der dies tatsächlich hat (aber sehr tief in einer separaten Bibliothek verborgen ist):

class x { 
  constructor(id) {this._id = id} 
  get id() {return this._id}
}
let y = new x(3)

Jetzt haben Sie sowohl y.id als auch y._id, die funktionieren und denselben Wert zurückgeben. Wenn Sie jedoch console.log(y) ausführen, wird nur die _id-Taste angezeigt.

 enter image description here

0
icc97

Wie gesagt, es ist eine Praxis unter vielen Entwicklern, eine schlechte. 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, dann fehlt Ihnen Ihre Dokumentationsfähigkeit. Viele der öffentlichen Projekte im Internet sind sehr schlecht dokumentiert, weshalb die "Unterstrich" -Konventionen wahrscheinlich von den meisten unterentwickelten Entwicklern "akzeptiert" wurden, während andere sich dafür entschieden haben, dem Fluss zu folgen, 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, in dem es heißt: " Die Konvention für die Benennung von Unterstrichen macht es sehr einfach, auf einen Blick zu erkennen, ob eine variable Funktion als öffentlich oder privat gedacht ist. ". Meine Antwort lautet: "Kommentare sind wie Bilder, in diesem Fall sind sie tausend Unterstriche wert.

Es gibt ein kostenloses Dokumentationswerkzeug namens Doxygen. Es unterstützt zwar kein spezielles JavaScript, kann jedoch eine professionelle Dokumentation für Ihre JavaScript-Anwendungen erstellen, wenn Sie Doxygen-Präfixe in Ihren Kommentaren verwenden. Es ist sehr einfach, JavaScript-Anwendungen mit Dokumentation zu erstellen, und zwar sowohl für Entwickler als auch für Benutzer, wenn Sie sich etwas in Ihre Codekommentare investieren. 

Denken Sie daran, dass es Tools gibt, die Kommentare und Konsolenanweisungen für "Produktionsversionen" entfernen 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 Minifizierung, Kommentare und Konsolenanweisungen beibehalten), Release Build (Entfernen Sie Kommentare und Konsolenanweisungen und minimieren Sie den Dev Build. Es ist nicht erforderlich, den Dev Build bei der Veröffentlichung neu zu kompilieren Qualitätscode, bereiten Sie ihn einfach für die Veröffentlichung vor und setzen Sie ihn ein).

0
BeosFreak