Programmierer, die das ganze Jahr über C, C#, Java und andere objektorientierte Sprachen verwenden, beschäftigen sich fast täglich damit. In diesen Sprachen ist die Bedeutung davon sehr klar, das heißt, es zeigt auf die aktuelle Objektinstanz, und wir können sie mit Zuversicht verwenden. In JavaScript, einer dynamischen Sprache, hat sich die Schreibmethode jedoch nicht geändert, ihre Bedeutung ist jedoch stark unterschiedlich. Das Folgende ist ein Beispiel unter Verwendung des Browsers Firefox14.0.1.
Zuerst Hallo Welt o(^▽^)o
Es ist mehr als ein Jahr her, seit ich zum ersten Mal mit dem Selbstlernen von JavaScript, einer flexiblen Programmiersprache, begonnen habe.
In mehr als einem Jahr hat mir diese Sprache nicht nur hohe berufliche Erträge beschert, sondern auch viele unerwartete Überraschungen, die es mir als Kunststudent ermöglichen, den Charme des Programmierens zu schätzen.
Ab heute werde ich meinen Blog jeden Montag aktualisieren, nicht nur zum Teilen, sondern auch um mich selbst zu ermutigen.
OK, kommen wir zum heutigen Thema. Heute werden wir über ein spezielles Objekt in Javascript sprechen: dieses
Freunde, die mit anderen objektorientierten Programmiersprachen (wie Java, C, C usw.) in Berührung gekommen sind, sind möglicherweise damit sehr vertraut.
Aber warum bereitet uns Javascript oft große Probleme?
Lassen Sie uns zunächst über die Unterschiede zu anderen Programmiersprachen sprechen
In JavaScript ist dies ein spezielles Objekt, im Gegensatz zu anderen Programmiersprachen, ein Wert, der in einer Instanz gespeichert wird und direkt auf diese Instanz verweist.
Aber als separater Zeiger, der auf unterschiedliche Orte unter unterschiedlichen Umständen zeigt, weshalb wir ihn verwechseln.
Lassen Sie uns einen Blick darauf werfen, wie es unter verschiedenen Umständen aussieht
1. Im globalen Geltungsbereich:
Dies ist am besten zu verstehen, das heißt, im globalen Bereich zeigt dies auf das Fenster, das heißt, im globalen Bereich sind dies und das Fenster äquivalent:
console.log(this === window); //true
Da dies zu diesem Zeitpunkt dem Fenster entspricht, verweisen die Variablen, die wir im globalen Bereich deklarieren, auch darauf:
var x = 1; console.log(this.x);//1 console.log(window.x);//1
Natürlich haben wir eine andere Möglichkeit, Variablen zu deklarieren:
x = 0; function setNum(){ x = 1; }; console.log(this.x);//0 setNum(); console.log(this.x);//1
Wenn Sie eine Variable ohne Verwendung von var oder let deklarieren, entspricht dies dem Hinzufügen oder Ändern des Attributwerts von global this
Es scheint sehr einfach zu sein. Ist es nicht nur ein Objekt, das dem Fenster entspricht?
Wenn das alles wäre, müsste das natürlich vielleicht gar nicht existieren.
Das Problematischste daran ist, dass es völlig unterschiedliche Formen in unterschiedlichen Bereichen hat
2. Wenn in einer Funktion:
Als wir hier ankamen, wurde diese Falle nach und nach enthüllt
Warum heißt es hier, dass es sich um eine Funktion und nicht um einen lokalen Bereich handelt? Um darüber zu sprechen, müssen wir zunächst verstehen, was eine Funktion ist
In Javascript ist Funktion ein spezielles Objekt in js: Funktion, das verschiedene Formen hat
Was wir normalerweise sehen:
function set(){ var x = 0; };
In dieser Form entspricht der interne This dem globalen Bereich und zeigt direkt auf das Fenster, sodass seine Form immer noch dem Fenster entspricht.
var x = 0; function num(){ this.x = 1; } console.log(this.x);//0 num(); console.log(this.x);//1
Hier kann es leicht passieren, dass man einen Fehler macht. Viele Leute denken, dass die aktuelle Position, wenn sie sich bereits in einer Funktion befindet, auf diese Funktion verweisen sollte
Wenn Sie diese Funktion jedoch instanziieren (neu), generiert diese Funktion eine völlig neue Umgebung, und diese ändert sich in diesem Fall auch entsprechend und zeigt auf die Instanz, in der sie sich befindet.
num = "0"; function setThis(){ this.num = "1"; } console.log(this.num);//"0" new setThis(); console.log(this.num);//"0" console.log(new setThis().num);//1
Das liegt daran, dass diese Funktion nach der Instanziierung zu einem Instanzobjekt wird und das darin enthaltene „this“ natürlich auf dieses Instanzobjekt zeigt, genau wie das „this“ am Anfang auf das Fensterobjekt zeigt, auf die Stelle, an der es sich befindet von
Außerdem haben wir beim Schreiben von Javascript normalerweise die Möglichkeit, Funktionen aufzurufen, nämlich Ereignisse an Elemente wie button.addEventListener('click', fn, false) usw. zu binden, falls dies in fn erforderlich ist Wenn dies verwendet wird, verweist es auf das Ereignisverarbeitungselement, nämlich button
Hinweis: Dies ist ein Schlüsselwort, Sie können es nicht überschreiben.
Unbewusst habe ich viel mehr Formen geschrieben, z. B. in HTML, z. B. im DOM-Ereignishandler. Ich werde hier nicht weitermachen Ich werde darüber
im Prototyp sprechen
Nach meinem Verständnis ist dies ein Hinweis und wird dementsprechend eine wichtigere Position in der Prototypenkette einnehmen, aber es liegt heute nicht in unserem Rahmen, daher werde ich es vorerst nicht zu ausführlich erklären
Von nun an werde ich grundsätzlich jeden Montag aktualisieren. Als Neuling in JavaScript hoffe ich auch, dass das, was ich schreibe, mit mehr Menschen geteilt werden kann, und ich hoffe, dass ich mehr Erfahrungen aus den Gedanken aller zusammenfassen kann!
Was genau das in JavaScript ist (1), werde ich jeden Montag aktualisieren. Als Neuling in JavaScript hoffe ich, dass das, was ich schreibe, mit Freunden in meiner Umgebung geteilt werden kann, und ich hoffe, dass ich mit jedem Lernerfahrungen austauschen kann andere. Danke!