JavaScript-də `this`-in icra kontekstinin dəyəri nəyə bağlıdır?
sobes.tech Süni İntellekt
AI-dan cavab
JavaScript-də this dəyəri funksiyanın çağırılma üsulundan asılıdır. Əsas ssenarilər:
-
Qlobal kontekst: Funksiyaların xaricində, sərt rejimdə (
'use strict')thisundefinedolur. Sərt rejim olmadan, bu qlobal obyekt olur (windowbrauzerdə,globalNode.js-də). -
Obyekt metodunun çağırılması:
thisçağırılan metodun aid olduğu obyektə işarə edir.const obj = { prop: 'dəyər', method: function() { // this === obj console.log(this.prop); } }; obj.method(); -
Adi funksiyanın çağırılması: Sərt rejimdə,
thisundefinedolur. Sərt rejim olmadan, bu qlobal obyekt olur.function myFunction() { // sərt rejimdə this === undefined // sərt rejim olmadan this === window (brauzerdə) console.log(this); } myFunction(); -
Konstruktor (
new):newoperatoru ilə konstruktor funksiyasından istifadə edildikdə,thisfunksiyanın içində yeni yaradılan obyektə istinad edir.function MyClass(name) { this.name = name; // this === yeni obyekt } const instance = new MyClass('test'); // instance.name === 'test' -
Açıq bağlama (
call,apply,bind):call,applyvəbindmetodları funksiyanınthisdəyərini açıq şəkildə təyin etməyə imkan verir.call(thisArg, arg1, arg2, ...): Funksiyanı çağırır,this-ithisArg-a təyin edir və arqumentləri ayrıca ötürür.apply(thisArg, [argsArray]): Funksiyanı çağırır,this-ithisArg-a təyin edir və arqumentləri massiv kimi ötürür.bind(thisArg): Daimi olaraqthisilə bağlı yeni funksiya qaytarır.
const anotherObj = { value: 42 }; function showValue() { console.log(this.value); } showValue.call(anotherObj); // 42 göstərəcək -
Ox funksiyaları (
=>): Ox funksiyaları özthis-ə malik deyil.thisdəyəri, onu təyin edən leksikal kontekstdən irsən gəlir.const outerObj = { name: 'Outer', method: function() { const arrowFunc = () => { // this, outerObj-in method-u kimi çağırıldığından irsən gəlir console.log(this.name); }; arrowFunc(); } }; outerObj.method(); // 'Outer' göstərəcək const anotherArrowFunc = () => { // this, qlobal kontekstdən irsən gəlir (və ya sərt rejimdə undefined) console.log(this); }; anotherArrowFunc(); -
DOM hadisə idarəediciləri: Əksər hallarda, hadisə idarəedicisində
this, hadisənin baş verdiyi DOM elementinə istinad edir.// Brauzer nümunəsi const button = document.querySelector('button'); button.addEventListener('click', function() { // this === button console.log(this.tagName); });
Bu mexanizmləri başa düşmək, JavaScript-də this-in düzgün istifadəsi üçün çox vacibdir.