Tässä opetusohjelmassa opit JavaScriptin avainsanasta esimerkkien avulla.
JavaScriptissä this
avainsana viittaa objektiin, johon sitä kutsutaan.
1. tämä Inside Global Scope
Kun this
sitä käytetään yksin, this
viittaa globaaliin objektiin ( window
selainobjekti). Esimerkiksi,
let a = this; console.log(a); // Window () this.name = 'Sarah'; console.log(window.name); // Sarah
Tässä this.name
on sama kuin window.name
.
2. tämä sisäpuolinen toiminto
Kun this
sitä käytetään funktiossa, this
viittaa globaaliin objektiin ( window
objekti selaimissa). Esimerkiksi,
function greet() ( // this inside function // this refers to the global object console.log(this); ) greet(); // Window ()
3. tämä sisärakentajan toiminto
JavaScriptissä rakenninfunktioita käytetään objektien luomiseen. Kun funktiota käytetään konstruktorifunktiona, this
viittaa esineeseen, jonka sisällä sitä käytetään. Esimerkiksi,
function Person() ( this.name = 'Jack'; console.log(this); ) let person1 = new Person(); console.log(person1.name);
Tuotos
Henkilö (nimi: "Jack") Jack
Tässä this
viittaa henkilö1-objektiin. Siksi person1.name
antaa meille Jack.
Huomaa : Kun this
sitä käytetään ES6-luokkien kanssa, se viittaa esineeseen, jonka sisällä sitä käytetään (samanlainen kuin konstruktoritoiminnot).
4. tämä Inside Object -menetelmä
Kun this
sitä käytetään objektin menetelmän sisällä, this
viittaa esineeseen, jossa se on. Esimerkiksi,
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();
Tuotos
(nimi: "Jack", ikä: 25, tervehdi: ƒ) Jack
Edellisessä esimerkissä this
viittaa person
esineeseen.
5. tämä sisäpuolinen toiminto
Kun käytät this
sisäisen toiminnon sisällä (menetelmän sisällä), this
viittaa globaaliin objektiin. Esimerkiksi,
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();
Tuotos
(nimi: "Jack", ikä: 25, tervehdys: ƒ) 25 Ikkuna (…) määrittelemätön
Tässä this
sisällä innerFunc()
tarkoittaa globaalia kohdetta, koska innerFunc()
se on menetelmän sisällä.
Kuitenkin, this.age
ulkopuolella innerFunc()
viittaa person
objektin.
6. tämä sisäpuoli-nuolitoiminto
Nuolitoiminnon sisällä this
viittaa ylätason laajuuteen. Esimerkiksi,
const greet = () => ( console.log(this); ) greet(); // Window (… )
Nuolitoiminnoilla ei ole omaa this
. Kun käytät this
nuolitoimintoa, this
viittaa sen ylätason objektiin. Esimerkiksi,
const greet = ( name: 'Jack', // method sayHi () ( let hi = () => console.log(this.name); hi(); ) ) greet.sayHi(); // Jack
Tässä toiminnon this.name
sisällä hi()
viitataan greet
esineeseen.
Voit käyttää nuolitoimintoa myös ongelman ratkaisemiseen undefined
käytettäessä toimintoa menetelmän sisällä (kuten esimerkissä 5 nähdään). Esimerkiksi,
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();
Tuotos
(nimi: "Jack", ikä: 25, tervehdys: ƒ) 25 (nimi: "Jack", ikä: 25, tervehdys: ƒ) 25
Tässä innerFunc()
määritetään nuolitoiminnolla. Se ottaa this
sen vanhemman laajuudesta. Näin ollen this.age
antaa 25 .
Kun nuolitoimintoa käytetään yhdessä this
, se viittaa ulompaan laajuuteen.
7. tämä sisäinen toiminto tiukassa tilassa
Kun this
sitä käytetään toiminnossa, jossa on tiukka tila, this
on undefined
. Esimerkiksi,
'use strict'; this.name = 'Jack'; function greet() ( // this refers to undefined console.log(this); ) greet(); // undefined
Huomaa : Kun käytät this
funktiota tiukassa tilassa, voit käyttää JavaScript-toimintokutsu ().
Esimerkiksi,
'use strict'; this.name = 'Jack'; function greet() ( console.log(this.name); ) greet.call(this); // Jack
Kun siirtää this
kanssa call()
toiminto, greet()
käsitellään menetelmällä this
objektin (maailmanlaajuinen objekti tässä tapauksessa).