Šioje pamokoje su pavyzdžiais sužinosite apie „JavaScript“ šį raktinį žodį.
„JavaScript“ this
raktinis žodis reiškia objektą, kuriame jis vadinamas.
1. tai „Inside Global Scope“
Kai this
naudojamas atskirai, this
nurodo visuotinį objektą ( window
objektą naršyklėse). Pavyzdžiui,
let a = this; console.log(a); // Window () this.name = 'Sarah'; console.log(window.name); // Sarah
Čia this.name
tas pats kaip window.name
.
2. ši vidinė funkcija
Kai this
naudojamas funkcijoje, this
nurodo visuotinį objektą ( window
objektą naršyklėse). Pavyzdžiui,
function greet() ( // this inside function // this refers to the global object console.log(this); ) greet(); // Window ()
3. ši vidinė konstruktoriaus funkcija
„JavaScript“ sistemoje objektų kūrimui naudojamos konstruktoriaus funkcijos. Kai funkcija naudojama kaip konstruktoriaus funkcija, this
nurodo objektą, kuriame ji naudojama. Pavyzdžiui,
function Person() ( this.name = 'Jack'; console.log(this); ) let person1 = new Person(); console.log(person1.name);
Rezultatas
Asmuo (vardas: „Džekas“) Džekas
Čia this
nurodo objektą asmuo1. Štai kodėl, person1.name
suteikia mums Džekas.
Pastaba : kai this
naudojamas su ES6 klasėmis, jis nurodo objektą, kuriame jis naudojamas (panašiai kaip konstruktoriaus funkcijos).
4. šis „Inside Object“ metodas
Kai this
naudojamas objekto metodo viduje, this
nurodo objektą, kuriame jis yra. Pavyzdžiui,
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();
Rezultatas
(vardas: „Džekas“, amžius: 25, pasveikink: ƒ) Džekas
Ankstesniame pavyzdyje this
nurodo person
objektą.
5. ši vidinė vidinė funkcija
Kai pasiekiate this
vidinę funkciją (metodo viduje), this
reiškia globalų objektą. Pavyzdžiui,
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();
Rezultatas
(vardas: „Džekas“, amžius: 25, pasisveikink: ƒ) 25 Langas (…) neapibrėžtas
Čia this
viduje innerFunc()
reiškia globalų objektą, nes innerFunc()
jis yra metodo viduje.
Tačiau this.age
išorė innerFunc()
nurodo person
objektą.
6. ši rodyklės vidinė funkcija
Rodyklės funkcija this
nurodo pirminę sritį. Pavyzdžiui,
const greet = () => ( console.log(this); ) greet(); // Window (… )
Rodyklių funkcijos neturi savo this
. Kai this
naudojate rodyklės funkciją, this
nurodo jos pirminės apimties objektą. Pavyzdžiui,
const greet = ( name: 'Jack', // method sayHi () ( let hi = () => console.log(this.name); hi(); ) ) greet.sayHi(); // Jack
Čia this.name
viduje hi()
funkcija nurodo greet
objektą.
Taip pat galite naudoti rodyklės funkciją, kad išspręstumėte problemą, susijusią undefined
su funkcijos naudojimu metodo viduje (kaip parodyta 5 pavyzdyje). Pavyzdžiui,
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();
Rezultatas
(vardas: „Džekas“, amžius: 25, pasisveikinimas: ƒ) 25 (vardas: „Džekas“, amžius: 25, pasisveikinimas: ƒ) 25
Čia innerFunc()
apibrėžiama naudojant rodyklės funkciją. Tai perima this
iš savo tėvų taikymo srities. Vadinasi, this.age
duoda 25 .
Kai rodyklės funkcija naudojama kartu this
, ji nurodo išorinę sritį.
7. ši vidinė funkcija su griežtu režimu
Kai this
naudojamas griežto režimo funkcijoje, this
yra undefined
. Pavyzdžiui,
'use strict'; this.name = 'Jack'; function greet() ( // this refers to undefined console.log(this); ) greet(); // undefined
Pastaba : Kai naudojate this
funkciją griežto režimo viduje, galite naudoti „JavaScript“ funkcijos iškvietimą ().
Pavyzdžiui,
'use strict'; this.name = 'Jack'; function greet() ( console.log(this.name); ) greet.call(this); // Jack
Kai praeisite this
su call()
funkcija, greet()
bus traktuojamas kaip objekto metodas this
(šiuo atveju globalus objektas).