Middle
Porozprávaj o kontexte funkcií v JavaScript.
sobes.tech AI
Odpoveď od AI
Контекст izvršavanja (this) u JavaScript-u одређује како се функција позива и које вредности су доступне унутар ње. Контекст се динамички мења у зависности од начина позива:
- Глобални контекст: ван функција,
thisсе односи на глобални објекат (windowу прегледачу,globalу Node.js-у).// У прегледачу console.log(this === window); // true // У Node.js-у console.log(this === global); // true - Контекст функције:
- Стандардни позив: У не-строг режиму
thisсе односи на глобални објекат (ако функција није метод објекта). У strict режиму ("use strict";)thisће битиundefined.function showThis() { console.log(this); } showThis(); // У не-строг режиму: Глобални објекат; У strict режиму: undefined - Позив као метода објекта:
thisсе односи на објекат којем припада метода.
const user = { name: 'Alice', greet: function() { console.log("Hello, my name is " + this.name); } }; user.greet(); // Hello, my name is Alice - Позив са
new(конструктор):- Креира нови објекат, који постаје вредност
thisунутар конструкторске функције, и враћа тај објекат.
function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob - Креира нови објекат, који постаје вредност
- Јасно навођење контекста (
call,apply,bind):call(thisArg, arg1, arg2, ...): Позива функцију са датимthisи аргументима наведеним посебно.apply(thisArg, [argsArray]): Позива функцију са датимthisи аргументима у низу.bind(thisArg, arg1, arg2, ...): Враћа нову функцију, чији јеthisзаувек повезан саthisArgи аргументима.
function introduce(greeting, punctuation) { console.log(greeting + ", I am " + this.name + punctuation); } const person = { name: 'Charlie' }; introduce.call(person, "Hi", "!"); // Hi, I am Charlie! introduce.apply(person, ["Hello", "."]); // Hello, I am Charlie. const boundIntroduce = introduce.bind(person, "Hey"); boundIntroduce("?"); // Hey, I am Charlie?
- Стандардни позив: У не-строг режиму
- Šipkové funkcie: Nemajú vlastný
this. Zachytávajúthisz okolia, v ktorom boli definované.const obj = { name: 'David', sayLater: function() { // `this` tu odkazuje na `obj` setTimeout(() => { // `this` tu tiež odkazuje na `obj` (zdedené z `sayLater`) console.log("Later, I am " + this.name); }, 1000); } }; obj.sayLater(); // Later, I am David