Aufgrund seiner Laufzeitbindungsfunktion ist die Bedeutung davon in JavaScript viel umfassender. Es kann das globale Objekt, das aktuelle Objekt oder ein beliebiges Objekt sein, alles hängt von der Funktion ab Methode des Aufrufs. Es gibt mehrere Möglichkeiten, Funktionen in JavaScript aufzurufen: als Objektmethode, als Funktion, als Konstruktor und mit apply oder call. Im Folgenden werden wir die Bedeutung davon entsprechend den verschiedenen Aufrufmethoden diskutieren.
In JavaScript sind Funktionen auch Objekte, sodass die Funktion als Eigenschaft eines Objekts verwendet werden kann. Zu diesem Zeitpunkt wird die Funktion als Methode bezeichnet Bei Verwendung dieser Art von Aufrufmethode ist diese natürlich an das Objekt gebunden.
1
2
3
4
5
6
7
8
9
10
|
var point = { x : 0, y : 0, moveTo : function(x, y) { this.x = this.x + x;
this.y = this.y + y;
}
}; point.moveTo(1, 1)//this 绑定到当前对象,即 point 对象 |
aufruft Die Funktion kann auch direkt aufgerufen werden. Zu diesem Zeitpunkt ist sie an das globale Objekt gebunden. Im Browser ist window das globale Objekt. Zum Beispiel im folgenden Beispiel: Wenn die Funktion aufgerufen wird, wird diese an das globale Objekt gebunden und dann die Zuweisungsanweisung ausgeführt. Dies entspricht der impliziten Deklaration einer globalen Variablen, was offensichtlich nicht das ist, was der Aufrufer möchte.
1
2
3
4
5
6
|
function makeNoSense(x) { this.x = x; } code><div class="Zeilennummer3 index2 alt2"><code class="htmlscript plain">} code><div class="Zeilennummer4 index3 alt1"> <div class="Zeilennummer5 index4 alt2">
<code class="htmlscript plain">makeNoSense(5); x ;// x ist zu einer globalen Variablen mit dem Wert 5 geworden |
Bei internen Funktionen, also Funktionen, die in einem anderen Funktionskörper deklariert sind, führt diese Methode der Bindung an das globale Objekt zu einem weiteren Problem. Wir nehmen immer noch das zuvor erwähnte Punktobjekt als Beispiel. Dieses Mal hoffen wir, zwei Funktionen in der moveTo-Methode zu definieren, um die x- bzw. y-Koordinaten zu übersetzen. Das Ergebnis kann unerwartet sein. Nicht nur, dass sich das Punktobjekt nicht bewegt, sondern es gibt auch zwei weitere globale Variablen x und y.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
var point = { x : 0, y : 0, moveTo : function(x, y) { // Interne Funktion var moveX = function(x) { this.x = x;//Wohin ist das gebunden? } // Interne Funktion var moveY = function(y) { this.y = y;//Wohin ist das gebunden? } moveX(x) ; moveY(y ). } }; point.moveTo(1, 1 ); point.x;0 point.y; //==>0 x; //==>1 y; |
Dies ist ein Designfehler in JavaScript. Die richtige Designmethode besteht darin, dass diese der inneren Funktion an das Objekt gebunden wird, das ihrer äußeren Funktion entspricht , haben kluge JavaScript-Programmierer herausgefunden, wie man Variablen ersetzt, und der Konvention zufolge wird die Variable normalerweise so genannt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
var point = { x : 0, y : 0, moveTo : function(x, y) { var that = this // Interne Funktion var moveX = function(x) { that.x = x }; // Interne Funktion var moveY = function(y) { that.y = y; } moveX(x moveY(y); } }; point.moveTo(1, 1); point.x; //==>1 point.y; //==>1
|
JavaScript unterstützt objektorientierte Programmierung. Im Gegensatz zu gängigen objektorientierten Programmiersprachen verfügt JavaScript nicht über das Konzept einer Klasse -basierte Vererbung. Dementsprechend ist auch der Konstruktor in JavaScript etwas ganz Besonderes. Wenn er nicht mit new aufgerufen wird, ist er dasselbe wie eine gewöhnliche Funktion. Als weitere Konvention beginnen Konstrukteure mit einem Großbuchstaben, um Aufrufer daran zu erinnern, sie auf die richtige Weise aufzurufen. Bei korrektem Aufruf wird dieser an das neu erstellte Objekt gebunden.
1
2
3
4
|
function Point(x, y){
this .x = x; this.y = y ;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
function Point(x, y){ this.x = x;
this.y = y;
this.moveTo = function(x, y){
this.x = x;
this.y = y;
}
} var p1 = new Point(0, 0); var p2 = {x: 0, y: 0}; p1.moveTo(1, 1); p1.moveTo.apply(p2, [10, 10]); |
1 2
3
4
5
67
8
9
10
11
12
13
|
function Point(x, y ) { this.x = x code> this.y = this.moveTo = function(x, y){ this.x = x this.y = y } } var p1 = new Point(0, 0); var p2 = {x: 0, y: 0}; / code><div class="Zeilennummer12 index11 alt1">
<code class="htmlscript plain">p1.moveTo(1, 1); p1.moveTo.apply(p2, [10, 10]); |
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung dazu in js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!