Bei der Verwendung von JavaScript werden Menschen oft von diesem Kerl verwirrt. Für die meisten Entwickler mit OOP -Entwicklungserfahrung ist dies eine Kennung, die auf gewöhnliche Elemente im aktuellen Bereich verweist, aber in JavaScript erscheint es skurril, weil sie nicht festgelegt ist, sondern sich ändert, wenn sich die Ausführungsumgebung ändert. In JavaScript weist dies immer auf das Objekt hin, das die Methode aufruft, die sie sich befindet.
Lassen Sie uns ein einfaches Beispiel geben:
Die Codekopie lautet wie folgt:
Funktionstest () {
alarm (dies);
}
var obj = function () {
var name = 'testObj';
}
obj.objtest = test;
prüfen();
obj.objtest ();
Fügen Sie diesen Code in HTML ein und führen Sie diese Seite aus, Sie werden zuerst eine Warnung [Objektfenster] und dann eine Warnung sehen.
Die Codekopie lautet wie folgt:
var obj = function () {
var name = 'testObj';
}
Wir definieren zunächst eine Test () -Methode (), rufen die alert () -Methode in der Methode auf, um dies anzuzeigen, dann ein OBJ -Funktionsobjekt, fügen Sie ihm einen privaten Feldnamen hinzu und fügen ihm eine statische Methode hinzu.
Die Methoden test () und obj.objTest () werden jeweils aufgerufen. Das erste Warnbox fordert das Fensterobjekt auf, und die zweite Eingabeaufforderung ist der Code der von uns definierten OBJ -Funktion. Dies zeigt, dass der Wert davon anders ist, wenn die Testfunktion zweimal ausgeführt wird!
Dies zeigt, dass das Objekt, auf das das von diesem Schlüsselwort im Inneren bezogene Objekt unterschiedlich ist, unterschiedlich ist. Es ist hier zu beachten, dass JavaScript eine objektbasierte Sprache ist. Wenn sich unsere Variable oder Funktionsdefinition am Stamm des <script> </script> -Tags befindet, ist es tatsächlich gleichwertig, entsprechende Eigenschaften oder Methoden zum Fensterobjekt hinzuzufügen. Wenn wir Funktionen test () {} Code verwenden, um eine Funktion zu definieren, ist er dem Fensterobjekt, nämlich die Funktion des Fensters.Test (), tatsächlich gleichwertig, eine neue Funktion hinzuzufügen.
Wir können ein Experiment machen:
Die Codekopie lautet wie folgt:
Funktionstest () {
alarm (dies);
}
alert (test === Fenster.test);
Das Warnbox fordert True auf, was bedeutet, dass es dem aufgerufenen Fenster aufgerufen wird. Wenn wir also die Funktion test (), das Objekt, das diese Funktion aufruft, tatsächlich ein Fensterobjekt aufruft, bezieht sich dies auf ein Fensterobjekt, sodass der Inhalt des Warnfensters, wenn Alert (dies) [Objektfenster] ist. Wir weisen obj.objtest = test auf, um obj.objtest () auf test () zu zeigen. Wenn wir also obj.objtest () -Funktion nennen, ist es gleichwertig, die Funktion test () in OBJ aufzurufen. Dies bezieht sich also auf das OBJ -Objekt, und die Eingabeaufforderung ist die OBJ -Funktion, die der Code ist, den wir sehen.
Apropos, es sollte fast gleich sein. Vielleicht ist das obige Beispiel zu abstrakt und ich kann mir nicht vorstellen, welche Umstände es verwendet werden kann. Nehmen wir also eine Anforderung an und machen Sie ein Beispiel, das näher an praktisch ist.
Nehmen wir an, dass alle Hyperlinks auf unserer Seite jetzt nach Klicken in Rot geändert werden müssen und sie in JavaScript implementieren müssen. Die allgemeine Idee sollte darin bestehen, alle <a> Tags auf der Seite zu erhalten und dann alle <a> Tags durchzusetzen, ein Klickereignis für jedes einzeln zu registrieren und nach Auslöser des Ereignisses den Farbwert auf Rot festzulegen.
Der Beispielcode lautet wie folgt:
Die Codekopie lautet wie folgt:
// die Farbe ändern
function echnecolor () {
this.style.color = '#f00';
}
// initialisieren, Ereignisse für alle A -Tags registrieren
Funktion init () {
var customLinks = document.getElementsByTagName ('a');
für (i in CustomLinks) {
// Sie können auch Event -Listener verwenden, um Ereignisse zu registrieren
// Da möglicherweise mehr Code mit IE, FF und anderen Browsern kompatibel ist, können Sie ihn selbst schreiben
CustomLinks [i] .onclick = ChangeColor;
}
}
window.onload = init;
Fügen Sie diesen Code dem HTML -Dokument hinzu und fügen Sie dem Dokument einige Hyperlinks hinzu. Wenn der Hyperlink geklickt wird, wird die Farbe rot. Die hier definierte Änderungspunkte () -Funktion bezieht sich auf den aktuellen Hyperlink, wenn Sie auf den Hyperlink klicken. Wenn Sie die Funktion "echnecolor () direkt aufrufen, meldet der Browser einen Fehler und der Fehler wird aufgefordert:" this.style "ist null oder nicht ein Objekt oder undefiniert.
Ich frage mich, ob Sie dies dazu bringen können, wer den Artikel liest, dieses Schlüsselwort in JavaScript zu verstehen? Oder bist du schon ungeduldig? (:P)
Um dieses Thema wirklich ein tieferes Verständnis zu haben, müssen Sie ein tieferes Verständnis der Umfangs- und Umfangskette von JavaScript haben.
Der Umfang bezieht sich, wie der Name schon sagt, auf den Coderaum, in dem ein bestimmtes Attribut oder eine bestimmte Methode Zugriffsrechte aufweist. Einfach ausgedrückt, es ist der Anwendungsbereich dieser Variablen oder Methode im Code. Unter den meisten Hosen gibt es drei Bereiche: öffentlich, privat und schützen. Ich werde hier nicht ausführlich erklären. Wenn Sie Erfahrung in OOP haben, sollten Sie ein tiefes Verständnis haben. Ich möchte hier sagen, dass diese drei Zielfernrohrtypen für JavaScript fast bedeutungslos sind, da es in JavaScript nur einen öffentlichen Bereich gibt, in dem der Umfang in Funktionen aufrechterhalten wird. Zum Beispiel:
Die Codekopie lautet wie folgt:
var test1 = 'glänzende Variable';
Funktionsbeispiel () {
var test2 = 'Beispielvariable';
Alarm (test1);
Alarm (test2);
}
Beispiel();
Alarm (test1);
Alarm (test2);
Nach dem, was wir zuvor erklärt haben, entspricht die TEST1 -Variable hier einer Eigenschaft des Fensters und funktioniert daher im gesamten Fensterbereich, während TEST2 in der Funktion von Beispiel () in intern Wenn der Test2 -Browser außerhalb der Funktion aufgerufen wird, wird ein Fehler aufgefordert. Und das Aufrufen von test1 in example () ist in Ordnung.
Basierend darauf geben wir ein weiteres Beispiel:
Die Codekopie lautet wie folgt:
var test = 'glanzvariable';
Funktionsbeispiel () {
var test = 'Beispielvariable';
}
Beispiel();
Alarm (Test);
Was wird passieren, wenn dieses Beispiel ausgeführt wird? Ja, das Warnbox fordert die "glänzende Variable" auf, da der Umfang der Testvariablen innerhalb der Beispiel () nur intern beibehalten wird und die externe Testvariable nicht beeinflusst. Was ist, wenn wir das VAR -Schlüsselwort der Testvariablen innerhalb von Beispiel () entfernen? Sie können es selbst ausprobieren.
Apropos, es gibt ein anderes Konzept, das heißt das Konzept der Bereichskette. Die Bereichskette ist der Pfad, der den Wert einer Variablen bestimmen kann. Wie aus dem obigen Beispiel ersichtlich ist, wird das VAR -Schlüsselwort verwendet, um die Bereichskette beizubehalten. Wenn die Variable die VAR -Schlüsselwortdeklaration verwendet, kann sie als Endpunkt der Bereichskette angesehen werden. Die Definition formaler Parameter derselben Funktion spielt ebenfalls eine ähnliche Rolle.
Apropos, Sie haben ein klareres Verständnis für diesen seltsamen Kerl, oder? Nach seiner einfachen Interpretation weist dies immer auf das Objekt hin, das die Funktion nennt, die sie sich befindet. Nach der Kette der Umfangs- und Umfangskette werden wir das wahre Gesicht deutlich bestimmen. Nehmen wir am Ende vom Beginn des Beispiels eine einfache Änderung vor:
Die Codekopie lautet wie folgt:
Funktionstest () {
alarm (dies);
}
var obj = function () {
var name = 'testObj';
}
obj.objtest = test;
obj.objtest2 = function () {
prüfen();
}
prüfen();
obj.objtest ();
obj.objtest2 ();
Was vermuten Sie, wird auffordern? Sie können versuchen zu rennen (: p);
Wenn dies entsprechend der Änderung des Objekts geändert wird, das die Funktion aufruft, in der es sich befindet, können wir die Änderung seines aufrufenden Objekts erzwingen? Die Antwort lautet ja. In zukünftigen Artikeln werden wir diesen Teil des Inhalts sowie die Implementierungsmethoden verschiedener Arten von Datenmitgliedern in JavaScript, Schließungen und anderen Konzepten vorstellen.
Ich habe einige meiner Erfahrungen und Erfahrungen während des Lernprozesses geschrieben. Erstens kann ich sie mit Ihnen teilen und auch meine eigenen Mängel untersuchen. Wenn ich Fragen zum Schreiben habe, kritisieren Sie bitte und geben Sie mir Ratschläge. Vielen Dank!