Heim  >  Artikel  >  Web-Frontend  >  Eine ausführliche Erklärung hierzu finden Sie unter javascript_javascript skills

Eine ausführliche Erklärung hierzu finden Sie unter javascript_javascript skills

WBOY
WBOYOriginal
2016-05-16 16:28:151254Durchsuche

Dieses Objekt war schon immer eine Falle in js. Es ist schwierig zu beurteilen, worauf es hinweist, und wir machen aufgrund unserer Erfahrung mit self aus C oder Python oft einen solchen Fehler. Lassen Sie uns als Nächstes ausführlich über den Besitz dieses Objekts sprechen.

Regel1: Dies

der globalen Umwelt

Die Umgebung von JavaScript wird von Natur aus durch Funktionen bestimmt. Die Umgebung, die nicht durch Funktionen umschlossen ist, ist die globale Umgebung, die auf das globale Variablenfenster verweist das folgende Beispiel

Code kopieren Der Code lautet wie folgt:
var name='jjj';
console.log(this.name);
//wird jjj
erfolgreich ausgeben

Regel2: Dies, wenn es als Methode aufgerufen wird

Offensichtlich ist diese Situation leicht zu beurteilen. Sie stimmt mit self in Python überein. Dies weist zweifellos auf das Objekt hin, das die Methode aufruft

var user={
Name:'kkk'
};
user.getName=function(){
console.log(this.name);
};
user.getName();
//wird ausgegebenkkk


Regel3: Dies

bei Verwendung als Konstruktor Es ist unnötig zu erwähnen, dass dies zu diesem Zeitpunkt offensichtlich auf das neu erstellte Objekt verweist. Durch die Ausführung des Konstruktors wird das Objekt nur initialisiert. Das Objekt wurde vor der Ausführung erstellt

Hier sind einige Beispiele


Funktion Benutzer(name){
This.name=name;
}
var f1=new User('kkk');
var f2=Benutzer('kkk');
console.log(f1.name);//kkk
console.log(f2.name);//undefiniert hat kein Namensattribut


Regel 4: Dies

im indirekten Aufruf Der sogenannte indirekte Aufruf bezieht sich auf die Verwendung von Apply- und Call-to-Call-Funktionen. Zu diesem Zeitpunkt verweist dies auf den ersten Parameter in ihrer Parameterliste.

var setName=function(name){
This.name=name;
};
var user={level:2};
user.apply(setName,'jjj');
console.log(user.name);//jjj


Regel 5: Dies gilt auch für andere Situationen

Denken Sie daran, dass dies in anderen Fällen nicht geändert wird, da hier Fehler am wahrscheinlichsten passieren.

var name = "clever coder";
var person = {
Name: „foocoder“,
Hallo: function(sth){
        var sayhello = function(sth) {
console.log(this.name " sagt " etw);
        };
          sayhello(sth);
}
}
person.hello("Hallo Welt");//Cleverer Programmierer sagt Hallo Welt


Der obige Code sieht seltsam aus. Sollte das nicht auf eine Person hinweisen? Wir sollten bedenken, dass this in der verschachtelten Funktion nicht auf die Funktion zeigt, in der es verschachtelt ist. In diesem Beispiel zeigt this in sayhello nicht auf die Funktion, die hello entspricht. Wenn wir das Beispiel leicht ändern, wird es zu


hallo:function(sth){
console.log(this.name " sagt " etw);
}
//foocoder sagt Hallo Welt


Jeder hätte verstehen sollen, dass sayhello derzeit nicht als Methode aufgerufen wird, also auf das globale Objekt verweist. . . Zu diesem Zeitpunkt tritt das Problem auf. Wenn Sie das erste Beispiel mit node ausführen, wird undefiniert angezeigt. Ich frage mich, ob es jemand erklären kann.


Regel6:Bewertung verstößt gegen alle Regeln

Schließen Sie mit einem Beispiel ab

Code kopieren Der Code lautet wie folgt:

var name = "clever coder";
var user={
Name:'kkk'
};
user.getName=function(){
console.log(this.name);
};
var get=user.getName;
get();//cleverer Coder

Verstehst du?

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