Dieses Objekt war in JS schon immer eine Gefahr, und es ist schwierig zu beurteilen, worauf es hinweist. Wir machen diese Art von Fehlern oft aufgrund unserer Erfahrung von C ++ oder Python. Lassen Sie uns als nächstes im Detail über das Eigentum dieses Objekts sprechen.
Regel1: Dies in der globalen Umgebung
Die Umgebung von JavaScript wird von Natur aus durch Funktionen bestimmt. In JS kann der Kontext nicht durch Codeblöcke getrennt werden. Die Umgebung, die nicht von Funktionen eingepackt wird, ist die globale Umgebung. Dies zeigt in der globalen Umgebung auf das globale variable Fenster. Siehe das folgende Beispiel
Die Codekopie lautet wie folgt:
var name = 'jjj';
console.log (this.name);
// Der JJJ wird erfolgreich ausgegeben
Regel2: Dies als Methode aufgerufen
Offensichtlich ist diese Situation leicht zu beurteilen, sie steht in Python mit sich selbst überein. Dies zeigt zweifellos auf das Objekt, das die Methode aufruft
Die Codekopie lautet wie folgt:
var user = {
Name: 'KKK'
};
user.getName = function () {
console.log (this.name);
};
user.getName ();
// Der Ausgangskk wird ausgegeben
Regel3: Dies als Konstruktor
Ich muss zu diesem Zeitpunkt nicht viel darüber sagen. Es zeigt offensichtlich auf das neu erstellte Objekt. Der Betrieb des Konstruktors erstellt eigentlich kein Objekt, sondern ist nur die Initialisierung. Das Objekt wird erstellt, bevor es ausgeführt wird.
Hier sind einige Beispiele
Die Codekopie lautet wie folgt:
Funktion Benutzer (Name) {
this.name = name;
}
var f1 = neuer Benutzer ('KKK');
var f2 = user ('kkk');
console.log (f1.name); // kkk
console.log (f2.name); // undefined hat kein Namensattribut
Regel4: Dieser indirekte Anruf
Der sogenannte indirekte Aufruf bezieht sich auf die Verwendung von Anwendungs- und Anruffunktionen, und dies weist auf den ersten Parameter in ihrer Parameterliste hin.
Die Codekopie lautet wie folgt:
var setName = function (name) {
this.name = name;
};
var user = {Level: 2};
user.Apply (setName, 'jjj');
console.log (user.name); // jjj
Regel5: Dies in anderen Fällen
Denken Sie daran, dass dies in anderen Situationen nicht verändert wird, und dies ist auch der einfachste Ort, um Fehler zu machen.
Die Codekopie lautet wie folgt:
var name = "Clever Codierer";
var person = {
Name: "Foocoder",
Hallo: Funktion (sth) {
var sayshello = function (sth) {
console.log (this.name + "sagt" + sth);
};
Sayhello (Sth);
}
}
Person.hello ("Hallo Welt"); // cleverer Coder sagt Hallo Welt
Der obige Code sieht seltsam aus, sollte das nicht auf die Person hinweisen?
Wir sollten uns daran erinnern, dass dies in der verschachtelten Funktion nicht auf die Funktion hinweist, die sie nistet. In diesem Beispiel zeigt dies in Sayshello nicht auf die Funktion, die Hello entspricht. Wenn wir das Beispiel leicht ändern
Die Codekopie lautet wie folgt:
Hallo: Funktion (sth) {
console.log (this.name + "sagt" + sth);
}
// Foocoder sagt Hallo Welt
Jeder hätte verstehen sollen, dass Sayhello zu diesem Zeitpunkt nicht als Methode anruft, so dass dies auf das globale Objekt zeigt. . .
Zu diesem Zeitpunkt ist das Problem, dass das erste Beispiel für die Verwendung von Knoten zum Ausführen und Defined Hello World zeigt. Ich frage mich, ob es einen Meister gibt, der es erklärt.
Regel6: Eval brechen alle Regeln
Endlich mit einem Beispiel enden
Die Codekopie lautet wie folgt:
var name = "Clever Codierer";
var user = {
Name: 'KKK'
};
user.getName = function () {
console.log (this.name);
};
var get = user.getName;
get (); // cleverer Codierer
Verstehst du?