Šajā apmācībā jūs uzzināsit par JavaScript šo atslēgvārdu, izmantojot piemērus.
JavaScript valodā this
atslēgvārds attiecas uz objektu, kur to sauc.
1. šī iekšējā globālā darbības joma
Ja this
to lieto atsevišķi, tas this
attiecas uz globālo objektu ( window
objekts pārlūkprogrammās). Piemēram,
let a = this; console.log(a); // Window () this.name = 'Sarah'; console.log(window.name); // Sarah
Šeit this.name
ir tas pats, kas window.name
.
2. šī iekšējā funkcija
Kad this
tiek izmantots funkcijā, this
attiecas uz globālo objektu ( window
objektu pārlūkprogrammās). Piemēram,
function greet() ( // this inside function // this refers to the global object console.log(this); ) greet(); // Window ()
3. šī iekšējā konstruktora funkcija
JavaScript, lai izveidotu objektus, tiek izmantotas konstruktora funkcijas. Ja funkcija tiek izmantota kā konstruktora funkcija, this
attiecas uz objektu, kurā tā tiek izmantota. Piemēram,
function Person() ( this.name = 'Jack'; console.log(this); ) let person1 = new Person(); console.log(person1.name);
Rezultāts
Persona (vārds: "Džeks") Džeks
Šeit this
attiecas uz objektu person1. Tāpēc person1.name
dod mums Džeku.
Piezīme : Ja this
to lieto kopā ar ES6 klasēm, tas attiecas uz objektu, kurā tas tiek izmantots (līdzīgi kā konstruktora funkcijās).
4. šī iekšējā objekta metode
Ja this
tiek izmantots objekta metodē, tas this
attiecas uz objektu, kurā tas atrodas. Piemēram,
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();
Rezultāts
(vārds: "Džeks", vecums: 25, sveicināt: ƒ) Džeks
Iepriekš minētajā piemērā this
attiecas uz person
objektu.
5. šī iekšējā iekšējā funkcija
Kad piekļūstat this
iekšējai funkcijai (metodes iekšienē), tas this
attiecas uz globālo objektu. Piemēram,
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();
Rezultāts
(vārds: "Džeks", vecums: 25 gadi, sveiciens: ƒ) 25 Logs (…) nav definēts
Šeit this
iekšpuse innerFunc()
attiecas uz globālo objektu, jo innerFunc()
tas atrodas metodes iekšpusē.
Tomēr this.age
ārpuse innerFunc()
attiecas uz person
objektu.
6. šī bultiņas funkcija
Bultiņas funkcija this
attiecas uz vecāku darbības jomu. Piemēram,
const greet = () => ( console.log(this); ) greet(); // Window (… )
Bultu funkcijām nav savas this
. Izmantojot this
bultiņas funkciju, tiek this
norādīts uz tās vecāku darbības objektu. Piemēram,
const greet = ( name: 'Jack', // method sayHi () ( let hi = () => console.log(this.name); hi(); ) ) greet.sayHi(); // Jack
Šeit this.name
iekšpusē hi()
funkcija attiecas uz greet
objektu.
Varat arī izmantot bultiņas funkciju, lai atrisinātu problēmu, kas undefined
rodas, lietojot funkciju metodes iekšienē (kā redzams 5. piemērā). Piemēram,
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();
Rezultāts
(vārds: "Džeks", vecums: 25, sveiciens: ƒ) 25 (vārds: "Džeks", vecums: 25, sveiciens: ƒ) 25
Šeit innerFunc()
tiek definēts, izmantojot bultiņas funkciju. Tas ņem this
no vecāku darbības jomas. Tādējādi this.age
dod 25 .
Ja bultiņas funkcija tiek izmantota kopā this
, tā attiecas uz ārējo darbības jomu.
7. šī iekšējā funkcija ar stingru režīmu
Ja this
to lieto funkcijā ar stingru režīmu, this
ir undefined
. Piemēram,
'use strict'; this.name = 'Jack'; function greet() ( // this refers to undefined console.log(this); ) greet(); // undefined
Piezīme . Izmantojot this
funkciju stingrā režīmā, varat izmantot JavaScript funkciju izsaukumu ().
Piemēram,
'use strict'; this.name = 'Jack'; function greet() ( console.log(this.name); ) greet.call(this); // Jack
Kad jūs nododat this
ar call()
funkciju, tas greet()
tiek uzskatīts par objekta metodi this
(šajā gadījumā globālo objektu).