Middle
дар бораи контексти функсияҳо дар JavaScript гап зан.
sobes.tech AI
Ҷавоб аз AI
Контекстът на изпълнение (this) в JavaScript определя как се извиква функцията и какви стойности са достъпни вътре в нея. Контекстът се променя динамично в зависимост от начина на извикване:
- Глобален контекст: извън функции,
thisсе отнася за глобалния обект (windowв браузър,globalв Node.js).// В браузър console.log(this === window); // true // В Node.js console.log(this === global); // true - Контекст на функция:
- Стандартно извикване: В нестрог режим
thisсе отнася за глобалния обект (ако функцията не е метод на обект). В строг режим ("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?
- Стандартно извикване: В нестрог режим
- Стрелкови функции: Не имат собствен
this. Те улавятthisот обкръжаващата лексикална област (там, където са дефинирани).const obj = { name: 'David', sayLater: function() { // `this` тук се отнася за `obj` setTimeout(() => { // `this` тук също се отнася за `obj` (наследено от `sayLater`) console.log("Later, I am " + this.name); }, 1000); } }; obj.sayLater(); // Later, I am David