Junior
Какво е ключовата дума 'this'?
sobes.tech AI
Отговор от AI
this е ключова дума в JavaScript, която се отнася към обекта, в контекста на който се изпълнява текущият код. Нейната стойност се определя от начина на извикване на функция.
Основните начини за определяне на this:
- Глобален контекст: извън функция,
thisсе отнася към глобалния обект (windowв браузъра,globalв Node.js). - Обикновено извикване на функция: В нестрог режим (
strict mode)thisсъщо се отнася към глобалния обект (илиundefined, ако функцията е извикана като метод на обект, но този обект еnullилиundefined). В строг режим,thisе равно наundefined. - Метод на обект: Ако функцията се извиква като метод на обект (т.е. чрез оператор точка
.),thisсе отнася към обекта, който притежава метода. - Конструктор: При използване на оператора
new,thisсе отнася към новосъздадения екземпляр на обекта. - Методи
call(),apply(),bind(): Тези методи позволяват явно да се зададе стойността наthisпри извикване на функция.bind()връща нова функция с привързанthis, докатоcall()иapply()извикват функция с указанthis. - Стрелкови функции: Стрелковите функции нямат собствен
this.thisв стрелкова функция се наследява лексикално от околната област, в която е дефинирана.
Примери:
// Глобален контекст
console.log(this === window); // true (в браузъра)
// Обикновено извикване на функция
function myFunction() {
console.log(this);
}
myFunction(); // window (в нестрог режим)
// Метод на обект
const myObject = {
myMethod: function() {
console.log(this);
}
};
myObject.myMethod(); // myObject
// Конструктор
function MyConstructor() {
this.value = 10;
console.log(this);
}
const instance = new MyConstructor(); // обект-екземпляр
// call(), apply(), bind()
function greet(name) {
console.log("Hello, " + name + "! My name is " + this.name);
}
const person = { name: "Alice" };
greet.call(person, "Bob"); // Hello, Bob! My name is Alice
greet.apply(person, ["Bob"]); // Hello, Bob! My name is Alice
const boundGreet = greet.bind(person);
boundGreet("Bob"); // Hello, Bob! My name is Alice
// Стрелкова функция
const arrowFunction = () => {
console.log(this);
};
arrowFunction(); // window (ако е дефинирана в глобалния контекст)
Разбирането на това как this се определя в различните контексти е критично за писане на коректен JavaScript код.