2010-04-23 14 views
18

Bei der Codierung von JavaScript manchmal speichern Sie die Referenz des Objekts this in einer lokalen Variablen für verschiedene Zwecke (um den richtigen Umfang einzustellen, um Code-Verschleierungen, etc. zu helfen). Es gibt Codierer, die das Aliasing this zu that bevorzugen, um seine Absicht offensichtlich zu machen. Andere Leute benutzen self, da es auf das Objekt selbst zeigt. Ich sah sogar Quellcodes, wo me die Referenz hielt und es macht immer noch Sinn. Sicherlich gibt es andere.das, self oder ich - was soll man in JavaScript bevorzugen?

Welche sollte ich bevorzugen? Gibt es eine Konvention, die zu verwenden ist oder ist es nur die Frage des Geschmacks?

+1

Beachten Sie, dass der Programmierhintergrund ein wichtiger (der wichtigste?) Faktor zu sein scheint - diejenigen, die (d) Smalltalk oder Python verwenden oder gelernt haben von denen, die sie benutzt haben, neigen dazu, "Selbst" zu benutzen. – outis

Antwort

42

Ich persönlich benutze that, aber alles, was klar ist, ist in Ordnung.

Ich würde nicht self verwenden, da die globale Variable/window -property self bereits als Hinweis auf window existiert. Obwohl es völlig nutzlos ist (so ist niemand wahrscheinlich zu sorgen, dass Sie es sind Shadowing), erhöht sich leicht die Gefahr eines dummen Fehler gehen un-bemerkt:

var se1f= this;   // mis-spelled (perniciously). or maybe you just forgot to write line 
onclick= function() { 
    self.foo= 1;  // whoops, just wrote to `window`! 
}; 

während:

var thot= this; 
onclick= function() { 
    that.foo= 1;  // error thrown 
}; 

Etwas gekünstelt, aber JavaScript ist so schlampig, dass es Fehler macht, die Sie nicht wirklich machen wollen.

+0

Ein anderes Missgeschick ist das Vergessen von 'var' bei der Zuweisung zu' self'. IE * hasst * das. –

+0

Ja, guter alter IE und sein Fensterzuordnungs-Spaß. Trotzdem gibt es zumindest einen Fehler, um Sie wissen zu lassen, dass Sie eine schlechte Übung gemacht haben. Auch wenn die Fehlermeldung hoffnungslos irreführend ist. – bobince

2

Da ist eine Orange in Ihrem Apfelkorb, this hat eine sehr spezifische Kontextbedeutung. Die Wahl liegt wirklich zwischen self und me dieser Optionen. Zwischen denen ... Sie wählen, es ist auch egal, nur persönliche Vorlieben.

this bezieht sich auf den Kontext Ihrer in, so ist es nicht wirklich eine "Option" ohne eine Menge Verwirrung und leicht zu machen, Fehler zu machen. Ich sehe self verwendet viel mehr als me (in Beispielcode, Frameworks, Bibliotheken, etc). Es ist nur Vorliebe, aber ich stimme zu self ist attraktiver, nicht sicher, warum ... wieder nur meine Präferenz.

+2

Ich mag 'mich', weil es zwei Buchstaben weniger zu schreiben gibt ... aber es ist wirklich egal, solange du * konsistent * bist. –

+2

@codeka - großer Punkt, Konsistenz ist * weit * wichtiger als die Wahl des Namens hier –

+2

stimmte am Konsistenzpunkt überein. Es kann nur sein, dass die Wahl die Erfahrung eines Programmierers in anderen Sprachen verrät. 'self' ist Delphis Version von' this' und 'me' ist die Version von VB. Soweit ich weiß, wird "das" in keiner anderen Sprache verwendet. –

1

Nun, ich persönlich versuche besser zu machen, dass die Variable etwas mehr bedeutet als "das, was ich später brauche". Oft brauchen Sie diese temporären Variablen in Situationen, die ein wenig knorrig werden; Es könnte zwei oder mehr Schichten von temporären this Fällen geben, um zu verfolgen.

So wird zum Beispiel in einem jQuery-Setup, könnte ich etwas verwende den Elementtyp zu beachten, dass ein vorübergehender this Stash halten soll:

$('form').each(function() { 
    var $form = $(this); 
    $form.find('input:checkbox').each(function() { 
    var $checkbox = $(this); 
    // ... 
    }); 
}); 

Mit dem „$“ Präfix auf den Variablen ist ein schöner Weg, um zu verfolgen, ob das Objekt "jQuery-ized" war oder nicht :-)

Verwandte Themen