Šta je kontekst u JavaScript-u?
sobes.tech АИ
Одговор од АИ
Kontekst (this) u JavaScript-u je referenca na objekat unutar kojeg se izvršava trenutna funkcija. Njegova vrednost se određuje načinom na koji je funkcija pozvana, a ne mestom gde je definisana.
Glavni načini za određivanje konteksta:
-
Globalni kontekst: Van funkcija, u nelimiti režimu
thisse odnosi na globalni objekat (windowu pretraživaču,globalu Node.js). U strogo režimu,thisjeundefined.// Nelimiti režim (u pretraživaču) console.log(this === window); // true // Strogi režim "use strict"; console.log(this === undefined); // true -
Metod objekta: Ako se funkcija poziva kao metod objekta (
obj.method()),thisunutar funkcije se odnosi na taj objekat (obj).const user = { name: "John", greet: function() { console.log("Hello, " + this.name); } }; user.greet(); // Izlaz: Hello, John (this se odnosi na user) -
Poziv funkcije (
call,apply,bind): Metodecalliapplypozivaju funkciju sa eksplicitno navedenim kontekstom.bindkreira novu funkciju sa fiksnim kontekstom.function sayName(greeting) { console.log(greeting + ", " + this.name); } const person = { name: "Peter" }; sayName.call(person, "Hi"); // Izlaz: Hi, Peter (this = person) sayName.apply(person, ["Hello"]); // Izlaz: Hello, Peter (this = person) const boundSayName = sayName.bind(person, "Hey"); boundSayName(); // Izlaz: Hey, Peter (this = person) -
Konstruktor (
new): Pri pozivu funkcije sa operatoromnew, kreira se novi prazan objekat, ithisunutar konstruktorske funkcije se odnosi na taj novi objekat.function Person(name) { this.name = name; } const john = new Person("John"); console.log(john.name); // Izlaz: John (this unutar Person se odnosi na john) -
Streličaste funkcije: Kod streličastih funkcija nema sopstvenog konteksta.
thisunutar streličaste funkcije uzima vrednost iz spoljašnje (leksičke) oblasti vidljivosti gde je funkcija kreirana.const user = { name: "Alice", greet: function() { const innerGreet = () => { console.log("Hello, " + this.name); // this uzima vrednost iz greet (odnosi se na user) }; innerGreet(); } }; user.greet(); // Izlaz: Hello, Alice
Razumevanje kako se određuje this je ključno za pravilno rukovanje objektima, metodama i događajnim rukovaocima u JavaScript-u.