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 муҳим аст.