Šta je kontekst u funkciji?
sobes.tech АИ
Одговор од АИ
Контекст (this) у функцији у JavaScript-у дефинише се према начину на који је функција позвана, а не где је она декларативно постављена. Он указује на објекат којем функција припада или који је позива.
Начини одређивања контекста:
-
Глобални контекст: ван функција, или ако се функција позове без експлицитног објекта (
thisће бити глобални објекатwindowу прегледачу,globalу Node.js, илиundefinedу strict режиму).// У прегледачу console.log(this === window); // true function showContext() { console.log(this); } showContext(); // window -
Контекст објекта (метод): Ако се функција позове као метод објекта (
obj.method()),thisунутар функције ће се односити на тај објекат.const user = { name: 'Alice', greet: function() { console.log(`Здраво, ја сам ${this.name}`); } }; user.greet(); // Здраво, ја сам Alice -
Конструкторски контекст: При позиву функције са кључном речи
new(new MyClass()), ствара се нови објекат, иthisунутар конструктора се односи на тај нови објекат.function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob -
Јасно одређивање контекста: Методи
call,applyиbindомогућавају експлицитно постављање вредностиthisприликом позивања функције.call(thisArg, arg1, arg2, ...): Позива функцију са датимthisи аргументима, појединачно.apply(thisArg, [argsArray]): Позива функцију са датимthisи аргументима у виду низа.bind(thisArg, arg1, arg2, ...): Враћа нову функцију у којој јеthisфиксиран на дату вредност.
function displayInfo(age) { console.log(`${this.name} има ${age} година.`); } const person = { name: 'Charlie' }; displayInfo.call(person, 30); // Charlie има 30 година. displayInfo.apply(person, [35]); // Charlie има 35 година. const bondedDisplayInfo = displayInfo.bind(person, 40); bondedDisplayInfo(); // Charlie има 40 година. -
Стрељане функције: Стрељане функције немају сопствени
this. Наслеђујуthisиз лексичког окружења (области видљивости у којој су дефинисане).const anotherUser = { name: 'David', sayHello: function() { const innerArrow = () => { console.log(`Здраво из стрелке, ${this.name}`); }; innerArrow(); // `this` овде је anotherUser, наследи се од sayHello }, sayHelloBad: () => { // лоша пракса за методе објекта console.log(`Здраво из стрелке, ${this.name}`); } }; anotherUser.sayHello(); // Здраво из стрелке, David // У прегледачу, ван strict режима anotherUser.sayHelloBad(); // Здраво из стрелке, undefined (this је window)
Разумевање контекста је кључно за исправан рад са објектима, методама и догађајним обработачима у JavaScript-у.