const person = {
firstName: "John",
lastName : "Doe",
id : 5566,
fullName : function() {
return this.firstName + " " + this.lastName;
}
};
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>The JavaScript <i>this</i> Keyword</h1>
<p>In this example, <b>this</b> refers to the <b>person</b> object.</p>
<p>Because <b>fullName</b> is a method of the person object.</p>
<p id="demo"></p>
<script>
// Create an object:
const person = {
firstName: "John",
lastName: "Doe",
id: 5566,
fullName : function() {
return this.firstName + " " + this.lastName;
}
};
// Display data from the object:
document.getElementById("demo").innerHTML = person.fullName();
</script>
</body>
</html>
In JavaScript bezieht sich das Schlüsselwort this
auf ein Objekt.
Welches Objekt hängt davon ab, wie dies
aufgerufen (verwendet oder aufgerufen) wird?
Das Schlüsselwort this
bezieht sich je nach Verwendung auf unterschiedliche Objekte:
In einer Objektmethode bezieht sich this
auf das Objekt.
Allein dies
bezieht sich auf das globale Objekt.
In einer Funktion bezieht sich this
auf das globale Objekt.
In einer Funktion ist im strikten Modus dies
undefiniert
.
In einem Ereignis bezieht sich this
auf das Element, das das Ereignis empfangen hat.
Methoden wie call()
, apply()
und bind()
kann dies
auf jedes Objekt verweisen.
dies
ist keine Variable. Es ist ein Schlüsselwort. Sie können den Wert von this
nicht ändern.
Bei Verwendung in einer Objektmethode bezieht sich this
auf das Objekt.
Im Beispiel oben auf dieser Seite bezieht sich this
auf das Objekt person.
Weil die Methode fullName eine Methode des Objekts person ist.
fullName : function() {
return this.firstName + " " + this.lastName;
}
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>The JavaScript <i>this</i> Keyword</h1>
<p>In this example, <b>this</b> refers to the <b>person</b> object.</p>
<p>Because <b>fullName</b> is a method of the person object.</p>
<p id="demo"></p>
<script>
// Create an object:
const person = {
firstName: "John",
lastName: "Doe",
id: 5566,
fullName : function() {
return this.firstName + " " + this.lastName;
}
};
// Display data from the object:
document.getElementById("demo").innerHTML = person.fullName();
</script>
</body>
</html>
Bei alleiniger Verwendung bezieht sich this
auf das globale Objekt.
Weil dies
im globalen Bereich ausgeführt wird.
In einem Browserfenster ist das globale Objekt [object Window]
:
let x = this;
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>The JavaScript <i>this</i> Keyword</h1>
<p>In this example, <b>this</b> refers to the window object:</p>
<p id="demo"></p>
<script>
let x = this;
document.getElementById("demo").innerHTML = x;
</script>
</body>
</html>
Im strengen Modus bezieht sich this
bei alleiniger Verwendung auch auf das globale Objekt:
"use strict";
let x = this;
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>The JavaScript <i>this</i> Keyword</h1>
<p>In this example, <b>this</b> refers to the window object:</p>
<p id="demo"></p>
<script>
"use strict";
let x = this;
document.getElementById("demo").innerHTML = x;
</script>
</body>
</html>
In einer Funktion ist das globale Objekt die Standardbindung für dies
.
In einem Browserfenster ist das globale Objekt [object Window]
:
function myFunction() {
return this;
}
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>The JavaScript <i>this</i> Keyword</h1>
<p>In this example, <b>this</b> refers to the the window object:</p>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = myFunction();
function myFunction() {
return this;
}
</script>
</body>
</html>
Der strenge Modus von JavaScript erlaubt keine Standardbindung.
Wenn es also in einer Funktion im strikten Modus verwendet wird, ist dies
undefiniert
.
"use strict";
function myFunction() {
return this;
}
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>The JavaScript <i>this</i> Keyword</h1>
<p>In a function, by default, <b>this</b> refers to the global object.</p>
<p>Strict mode does not allow default binding, so <b>this</b> is:</p>
<p id="demo"></p>
<script>
"use strict";
document.getElementById("demo").innerHTML = myFunction();
function myFunction() {
return this;
}
</script>
</body>
</html>
In HTML-Ereignishandlern bezieht sich this
auf das HTML-Element, das das empfangen hat Ereignis:
<button onclick="this.style.display='none'">
Click to
Remove Me!
</button>
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>The JavaScript <i>this</i> Keyword</h1>
<button onclick="this.style.display='none'">Click to Remove Me!</button>
</body>
</html>
In diesen Beispielen ist this
das Personenobjekt:
const person = {
firstName : "John",
lastName : "Doe",
id : 5566,
myFunction : function() {
return this;
}
};
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>The JavaScript <i>this</i> Keyword</h1>
<p>In this example, <b>this</b> refers to the <b>person object</b>.</p>
<p id="demo"></p>
<script>
// Create an object:
const person = {
firstName : "John",
lastName : "Doe",
id : 5566,
myFunction : function() {
return this;
}
};
// Display data from the object:
document.getElementById("demo").innerHTML = person.myFunction();
</script>
</body>
</html>
const person = {
firstName: "John",
lastName : "Doe",
id : 5566,
fullName : function() {
return this.firstName + " " +
this.lastName;
}
};
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>The JavaScript <i>this</i> Keyword</h1>
<p>In this example, <b>this</b> refers to the <b>person</b> object.</p>
<p>Because <b>fullName</b> is a method of the person object.</p>
<p id="demo"></p>
<script>
// Create an object:
const person = {
firstName: "John",
lastName: "Doe",
id: 5566,
fullName : function() {
return this.firstName + " " + this.lastName;
}
};
// Display data from the object:
document.getElementById("demo").innerHTML = person.fullName();
</script>
</body>
</html>
d. h. this.firstName ist die firstName-Eigenschaft von this (dem Personenobjekt).
Die Methoden call()
und apply()
sind vordefinierte JavaScript-Methoden.
Sie können beide verwendet werden, um eine Objektmethode mit einem anderen Objekt als Argument aufzurufen.
Die Funktion call()-Methode
Die Funktion apply()-Methode
Die Funktion bind()-Methode
Das folgende Beispiel ruft person1.fullName mit person2 als Argument auf, this bezieht sich auf person2, auch wenn fullName eine Methode von person1 ist:
const person1 = {
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
const person2 = {
firstName:"John",
lastName: "Doe",
}
// Return "John Doe":
person1.fullName.call(person2);
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>The JavaScript <i>this</i> Keyword</h1>
<p>In this example <strong>this</strong> refers to person2, even if it is a method of person1:</p>
<p id="demo"></p>
<script>
const person1 = {
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
const person2 = {
firstName:"John",
lastName: "Doe",
}
let x = person1.fullName.call(person2);
document.getElementById("demo").innerHTML = x;
</script>
</body>
</html>
Mit der Methode bind()
kann ein Objekt eine Methode von einem anderen Objekt ausleihen.
In diesem Beispiel werden zwei Objekte erstellt (Person und Mitglied).
Das Member-Objekt leiht sich die Fullname-Methode vom Person-Objekt:
const person = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
const member = {
firstName:"Hege",
lastName: "Nilsen",
}
let fullName = person.fullName.bind(member);
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Function bind()</h1>
<p>This example creates 2 objects (person and member).</p>
<p>The member object borrows the fullname method from person:</p>
<p id="demo"></p>
<script>
const person = {
firstName:"John",
lastName: "Doe",
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
const member = {
firstName:"Hege",
lastName: "Nilsen",
}
let fullName = person.fullName.bind(member);
document.getElementById("demo").innerHTML = fullName();
</script>
</body>
</html>
Um festzustellen, auf welches Objekt sich dies
bezieht; Verwenden Sie die folgende Reihenfolge.
Objekt
binden()
apply() und call()
Objektmethode
Globaler Geltungsbereich
Befindet sich this
in einer Funktion, die mit bind() aufgerufen wird?
Befindet sich this
in einer Funktion, die mit apply() aufgerufen wird?
Befindet sich this
in einer Funktion, die mit call() aufgerufen wird?
Befindet sich this
in einer Objektfunktion (Methode)? <p>Ist dies
in einer Funktion im globalen Bereich.