Heim  >  Artikel  >  Web-Frontend  >  Flexibles Verständnis dieses Zeigers in JavaScript_Javascript-Kenntnissen

Flexibles Verständnis dieses Zeigers in JavaScript_Javascript-Kenntnissen

PHP中文网
PHP中文网Original
2016-05-16 15:13:231419Durchsuche

Dies ist eines der Schlüsselwörter in JavaScript. Es wird häufig beim Schreiben von Programmen verwendet. Es ist besonders wichtig, das Schlüsselwort this richtig zu verstehen und zu verwenden. Zunächst muss gesagt werden, dass der Sinn dieser Funktion nicht bestimmt werden kann, wenn die Funktion ausgeführt wird. Tatsächlich zeigt dies letztendlich auf das Objekt, das sie aufruft. Dieser Satz ist etwas problematisch. Ich werde später erklären, warum es ein Problem gibt. Obwohl die meisten Artikel im Internet dies sagen, wird es in vielen Fällen keine Probleme geben, wenn Sie es so verstehen, aber tatsächlich ist es nicht genau zu verstehen Es ist also so, bevor Sie es verstehen. Es wird das Gefühl geben, nicht in der Lage zu sein, dies herauszufinden. Daher werde ich dieses Problem als Nächstes eingehend untersuchen.

Warum sollten Sie das lernen? Wenn Sie funktionale Programmierung oder objektorientierte Programmierung studiert haben, wissen Sie auf jeden Fall, wofür sie verwendet wird. Wenn Sie sie nicht studiert haben, müssen Sie diesen Artikel natürlich auch lesen Wenn Sie interessiert sind, ist dies schließlich etwas, das beherrscht werden muss.

Beispiel 1:

function a(){
var user = "追梦子";
console.log(this.user); //undefined
console.log(this); //Window
}
a();

Wie wir oben sagten, verweist dies letztendlich auf das Objekt, das es aufruft , die Funktion a wird hier tatsächlich vom Window-Objekt angezeigt, wie der folgende Code beweisen kann.

function a(){
var user = "追梦子";
console.log(this.user); //undefined
console.log(this);  //Window
}
window.a();

Es ist dasselbe wie der obige Code. Tatsächlich ist die Warnung auch ein Attribut des Fensters und wird auch vom Fenster angeklickt.

Beispiel 2:

var o = {
user:"追梦子",
fn:function(){
console.log(this.user); //追梦子
}
}
o.fn();

Dies hier zeigt auf Objekt o, weil Sie dies fn nennen. Es ist Durch o.fn() ausgeführt, ist der natürliche Punkt das Objekt o. Ich möchte noch einmal betonen, dass der Punkt nicht bestimmt werden kann, wenn die Funktion aufgerufen wird dazu. Um das herauszufinden.

Eigentlich sind Beispiel 1 und Beispiel 2 nicht genau genug. Das folgende Beispiel kann die obige Theorie zunichte machen.

Wenn Sie dies vollständig verstehen möchten, müssen Sie die nächsten Beispiele lesen

Beispiel 3:

var o = {
user:"追梦子",
fn:function(){
console.log(this.user); //追梦子
}
}
window.o.fn();

Dieser Code ist fast derselbe wie der obige Code, aber warum zeigt er hier nicht auf das Fenster, wenn dies gemäß der obigen Theorie letztendlich auf das Objekt verweist, das es hier aufruft? Lassen Sie mich zunächst etwas Besonderes sagen. Fenster ist ein globales Objekt in js. Die von uns erstellten Variablen fügen dem Fenster tatsächlich Attribute hinzu, sodass wir hier das Fensterpunktobjekt verwenden können.

Lassen Sie uns nicht erklären, warum dies im obigen Code nicht auf das Fenster verweist. Schauen wir uns einen Teil des Codes an.

var o = {
a:10,
b:{
a:12,
fn:function(){
console.log(this.a); //12
}
}
}
o.b.fn();

Das Objekt o wird hier auch angeklickt, aber das führt es auch nicht aus. Dann wirst du bestimmt sagen, dass ich das gesagt habe Anfang Sind die nicht alle falsch? Eigentlich ist es das nicht, es ist nur so, dass das, was ich am Anfang gesagt habe, ungenau war. Als nächstes werde ich einen Satz hinzufügen, von dem ich glaube, dass Sie das Problem, auf das dies hingewiesen wird, vollständig verstehen können.

Fall 1: Wenn es dies in einer Funktion gibt, es aber nicht vom übergeordneten Objekt aufgerufen wird, dann zeigt dies auf das Fenster. Was hier erklärt werden muss, ist das im Strikten Version von js, das zeigt nicht auf Fenster, aber wir werden die strikte Version hier nicht diskutieren. Wenn Sie mehr wissen möchten, können Sie online suchen.

Fall 2: Wenn dies in einer Funktion vorhanden ist und diese Funktion vom übergeordneten Objekt aufgerufen wird, dann zeigt dies auf das übergeordnete Objekt.

Fall 3: Wenn dies in einer Funktion vorhanden ist, enthält diese Funktion zwar mehrere Objekte, dies zeigt jedoch nur auf deren obere Ebene Wenn Sie es nicht glauben, schauen wir uns weiterhin einige Beispiele an.

var o = {
a:10,
b:{
// a:12,
fn:function(){
console.log(this.a); //undefined
}
}
}
o.b.fn();

Obwohl es in Objekt b kein Attribut a gibt, zeigt dies auch auf Objekt b, da dieses nur auf dessen Oberkante zeigt Objekt auf Ebene, unabhängig davon, ob in diesem Objekt etwas enthalten ist, das er haben möchte.

Es gibt einen weiteren Sonderfall, Beispiel 4:

var o = {
a:10,
b:{
a:12,
fn:function(){
console.log(this.a); //undefined
console.log(this); //window
}
}
}
var j = o.b.fn;
j();

Hier zeigt dies auf window , are you ein wenig verwirrt? Tatsächlich liegt es daran, dass Sie einen Satz nicht verstanden haben, was ebenfalls entscheidend ist.

Dies zeigt immer auf das Objekt, das es zuletzt aufgerufen hat, d. h. wer es aufgerufen hat, als es ausgeführt wurde. In Beispiel 4 wird die Funktion fn jedoch von Objekt b referenziert, wenn fn ein Wert zugewiesen wird Wenn die Variable j angegeben ist, wird sie nicht ausgeführt, sodass sie letztendlich auf window verweist. Dies unterscheidet sich von Beispiel 3, in dem fn direkt ausgeführt wird.

Das ist eigentlich dasselbe, weist aber in verschiedenen Situationen auf etwas anderes hin. Es gibt einige kleine Fehler in der obigen Zusammenfassung, und es kann nicht gesagt werden, dass es sich um einen Fehler handelt Die Situation wird in verschiedenen Umgebungen unterschiedlich sein, daher kann ich es nicht sofort klar erklären, man kann es nur langsam erleben.

Konstruktorversion davon:

function Fn(){
this.user = "追梦子";
}
var a = new Fn();
console.log(a.user); //追梦子

Der Grund, warum Objekt a den Benutzer in der Funktion Fn darauf hinweisen kann, liegt darin, dass das neue Schlüsselwort den Sinn von this ändern und dieses auf Objekt a verweisen kann, weil die Verwendung des neuen Schlüsselworts ist Um eine Objektinstanz zu erstellen, können Sie über unser Beispiel 3 nachdenken. Hier erstellen wir eine Instanz von Fn unter Verwendung der Variablen a (entspricht dem Kopieren einer Kopie von Fn in Objekt a). Das Objekt, das diese Funktion Fn aufruft, ist nur erstellt und nicht ausgeführt. Dies zeigt also natürlich auf das Objekt. Warum gibt es also einen Benutzer im Objekt Fn, weil Sie eine Kopie der Fn-Funktion auf Objekt a kopiert haben? Das neue Schlüsselwort entspricht dem Kopieren von Ordered one.

Darüber hinaus können wir den Sinn dieser Sache auch selbst ändern. Weitere Informationen finden Sie in der Zusammenfassung der Aufruf-, Anwendungs- und Bindungsmethoden in JavaScript . In diesem Artikel wird ausführlich erläutert, wie wir den Zeiger manuell ändern.

Das Obige ist der Inhalt des flexiblen Verständnisses dieses Hinweises auf _Javascript-Kenntnisse in JavaScript. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn