Kas yra kontekstas JavaScript?
sobes.tech AI
Atsakymas iš AI
Kontekstas (this) JavaScript yra nuoroda į objektą, kuriame vykdoma esama funkcija. Jo reikšmė nustatoma pagal tai, kaip funkcija buvo iškviesta, o ne pagal tai, kur ji buvo apibrėžta.
Pagrindiniai būdai nustatyti kontekstą:
-
Bendrasis kontekstas: Už funkcijų, ne griežtame režime,
thisnurodo į globalų objektą (windownaršyklėje,globalNode.js). Griežtame režimethisyraundefined.// Ne griežtas režimas (naršyklėje) console.log(this === window); // true // Griežtas režimas "use strict"; console.log(this === undefined); // true -
Objekto metodas: Jei funkcija iškviečiama kaip objekto metodas (
obj.method()),thisfunkcijos viduje nurodo į tą objektą (obj).const user = { name: "John", greet: function() { console.log("Hello, " + this.name); } }; user.greet(); // Išvestis: Hello, John (this nurodo į `user`) -
Funkcijos kvietimas (
call,apply,bind):callirapplymetodai iškviečia funkciją su aiškiai nurodytu kontekstu.bindsukuria naują funkciją su fiksuotu kontekstu.function sayName(greeting) { console.log(greeting + ", " + this.name); } const person = { name: "Peter" }; sayName.call(person, "Hi"); // Išvestis: Hi, Peter (this = `person`) sayName.apply(person, ["Hello"]); // Išvestis: Hello, Peter (this = `person`) const boundSayName = sayName.bind(person, "Hey"); boundSayName(); // Išvestis: Hey, Peter (this = `person`) -
Konstruktorius (
new): Kai funkcija kviečiama su operatoriuminew, sukuriamas naujas tuščias objektas, irthisfunkcijos konstruktoriuje nurodo į tą naują objektą.function Person(name) { this.name = name; } const john = new Person("John"); console.log(john.name); // Išvestis: John (this `Person` viduje nurodo į `john`) -
Rodyklės funkcijos: Rodyklės funkcijos neturi savo konteksto.
thisviduje paimamas iš išorės (leksiškai) aplinkos, kurioje funkcija buvo sukurta.const user = { name: "Alice", greet: function() { const innerGreet = () => { console.log("Hello, " + this.name); // `this` paimamas iš `greet` (nurodo į `user`) }; innerGreet(); } }; user.greet(); // Išvestis: Hello, Alice
Suprasti, kaip nustatomas this, yra labai svarbu teisingai dirbant su objektais, metodais ir įvykio apdorojėjais JavaScript'e.