I denne vejledning lærer du om JavaScript's dette nøgleord ved hjælp af eksempler.
I JavaScript this
henviser nøgleord til objektet, hvor det kaldes.
1. dette Inside Global Scope
Når this
det bruges alene, this
henviser det til det globale objekt ( window
objekt i browsere). For eksempel,
let a = this; console.log(a); // Window () this.name = 'Sarah'; console.log(window.name); // Sarah
Her this.name
er det samme som window.name
.
2. denne indvendige funktion
Når this
bruges i en funktion, this
refererer til det globale objekt ( window
objekt i browsere). For eksempel,
function greet() ( // this inside function // this refers to the global object console.log(this); ) greet(); // Window ()
3. denne Inside Constructor-funktion
I JavaScript bruges konstruktorfunktioner til at oprette objekter. Når en funktion bruges som en konstruktionsfunktion, this
henviser det til det objekt, hvori det bruges. For eksempel,
function Person() ( this.name = 'Jack'; console.log(this); ) let person1 = new Person(); console.log(person1.name);
Produktion
Person (navn: "Jack") Jack
Her this
henviser til person1-objektet. Det er derfor, person1.name
giver os Jack.
Bemærk : Når this
det bruges med ES6-klasser, henviser det til det objekt, inden for hvilket det bruges (svarende til konstruktorfunktioner).
4. denne Inside Object Method
Når this
det bruges inden for et objekts metode, this
refererer det til det objekt, det ligger i. For eksempel,
const person = ( name : 'Jack', age: 25, // this inside method // this refers to the object itself greet() ( console.log(this); console.log(this.name); ) ) person.greet();
Produktion
(navn: "Jack", alder: 25, hilse: ƒ) Jack
I ovenstående eksempel this
henviser til person
objektet.
5. denne indvendige indre funktion
Når du åbner this
en indre funktion (inde i en metode), this
refererer til det globale objekt. For eksempel,
const person = ( name : 'Jack', age: 25, // this inside method // this refers to the object itself greet() ( console.log(this); // (name: "Jack", age… ) console.log(this.age); // 25 // inner function function innerFunc() ( // this refers to the global object console.log(this); // Window (… ) console.log(this.age); // undefined ) innerFunc(); ) ) person.greet();
Produktion
(navn: "Jack", alder: 25, hilsen: ƒ) 25 Vindue (…) udefineret
Her refererer this
inde innerFunc()
til det globale objekt, fordi det innerFunc()
er inde i en metode.
Imidlertid refererer this.age
udvendigt innerFunc()
til person
objektet.
6. denne Inside Arrow-funktion
Inde i pilfunktionen this
refererer til det overordnede omfang. For eksempel,
const greet = () => ( console.log(this); ) greet(); // Window (… )
Pilfunktioner har ikke deres egne this
. Når du bruger this
inde i en pilfunktion, this
henviser det til dets overordnede omfangsobjekt. For eksempel,
const greet = ( name: 'Jack', // method sayHi () ( let hi = () => console.log(this.name); hi(); ) ) greet.sayHi(); // Jack
Her refererer funktionen this.name
inde hi()
til greet
objektet inde.
Du kan også bruge pilefunktionen til at løse problemet med at have, undefined
når du bruger en funktion i en metode (som det ses i eksempel 5). For eksempel,
const person = ( name : 'Jack', age: 25, // this inside method // this refers to the object itself greet() ( console.log(this); console.log(this.age); // inner function let innerFunc = () => ( // this refers to the global object console.log(this); console.log(this.age); ) innerFunc(); ) ) person.greet();
Produktion
(navn: "Jack", alder: 25, hilse: ƒ) 25 (navn: "Jack", alder: 25, hilse: ƒ) 25
Her innerFunc()
defineres ved hjælp af pilefunktionen. Det tager this
fra dets overordnede omfang. Derfor this.age
giver 25 .
Når pilfunktionen bruges med this
, henviser den til det ydre omfang.
7. denne indvendige funktion med streng tilstand
Når this
bruges i en funktion med streng tilstand, this
er undefined
. For eksempel,
'use strict'; this.name = 'Jack'; function greet() ( // this refers to undefined console.log(this); ) greet(); // undefined
Bemærk : Når du bruger this
inde i en funktion med streng tilstand, kan du bruge JavaScript-funktionskald ().
For eksempel,
'use strict'; this.name = 'Jack'; function greet() ( console.log(this.name); ) greet.call(this); // Jack
Når du passerer this
med call()
funktionen, greet()
behandles det som metoden til this
objektet (globalt objekt i dette tilfælde).