Sobes.tech
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); // чын (браузерде)

// Жалпысынан чакыруу
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 кодун туура жазуу үчүн маанилүү.