Wenn in JavaScript die Funktion zu einem Objekt gehört, wird das Verhalten des Zugriffs auf die Funktion über das Objekt als "Methodenaufruf" bezeichnet. Im Gegensatz zu ordentlichen Funktionsaufrufen ändert sich bei einem Methodenaufruf diese Referenz in der Funktion. Dies bezieht sich auf das Objekt, mit dem die Funktion aufgerufen wird (dieses Objekt wird zum Aufrufkontext des Methodenaufrufs):
Die Codekopie lautet wie folgt:
var x = 99;
var sample = {
x: 1,
Akt: Funktion (a) {
this.x = a*a; // Zuweisen Sie dem X -X -Wert X, nicht dem x globalen Objekt x.
}
}
Probe.Act (6);
console.log (sample.x); // 36
console.log (x); // 99
Wie beim Zugriff auf Eigenschaften in Objekten kann JavaScript zusätzlich zur Verwendung von DOT -Operatoren auch Bracket -Operatoren verwenden, um Methodenaufrufe zu tätigen:
Die Codekopie lautet wie folgt:
// andere Möglichkeiten, Methoden aufzurufen
Probe ["Act"] (7);
console.log (sample.x); // 49
Für Funktionen in JavaScript besteht ein interessantes Verhalten darin, Funktionen (Schließungen) in Funktionen einzubetten. Bei einem Methodenaufruf kann der Code in dieser eingebetteten Funktion auf den externen variablen Wert zugreifen, wenn eine eingebettete Funktion in der Methodenfunktion vorliegt:
Die Codekopie lautet wie folgt:
// verschachtelte Funktion kann außerhalb davon auf Variable zugreifen.
var y = 88;
var sample2 = {
y: 1,
Act2: Funktion (a) {
this.y = inner ();
Funktion inner () {
zurück ein*a;
}
}
}
Sample2.Act2 (8);
console.log (sample2.y); // 64
console.log (y); // 88
Entgegen der Intuition kann der in der Funktion eingebettete Code dies jedoch nicht von außen erben. Das heißt, in der eingebetteten Funktion bezieht sich dies nicht auf das Objekt, das die Methode aufruft, sondern auf das globale Objekt:
Die Codekopie lautet wie folgt:
// verschachtelte Funktion erbt nicht "dies". Das "This" in verschachtelter Funktion ist ein globales Objekt
var sample3 = {
Act3: function () {
innere();
Funktion inner () {
console.log (this); // Fensterobjekt
}
}
}
Probe3.Act3 ();
Wenn Sie wirklich auf das Objekt zugreifen müssen, das die Methode in der eingebetteten Funktion aufruft, können Sie diesen Wert in einer Variablen in der externen Funktion speichern:
Die Codekopie lautet wie folgt:
// übergeben "dies" an eine verschachtelte Funktion
var sample4 = {
Act4: function () {
var self = this;
innere();
Funktion inner () {
console.log (self); // Objekt {act4 = function ()}
}
}
}
probs4.act4 ();