كيفية الوصول بشكل صحيح إلى `this` داخل دالة الاستدعاء في JavaScript؟
مرحباً بالجميع! لقد بدأت للتو في تعلم JavaScript وواجهت مشكلة لا أستطيع حلها. لدي كائن `user` يحتوي على خاصية `name` وطريقة `greet`. أريد أن تقوم طريقة `greet` بعد ثانيتين بطباعة تحية باسم المستخدم. لهذا أستخدم `setTimeout`. لكن عندما أشغل الكود، يطبع `undefined` بدلاً من الاسم. إليك الكود الخاص بي:
```javascript
const user = {
name: 'آنا',
greet: function() {
setTimeout(function() {
console.log(`مرحباً، ${this.name}!`);
}, 2000);
}
};
user.greet(); // يطبع "مرحباً، undefined!"
```
أفهم أن المشكلة هي أن داخل دالة الاستدعاء في `setTimeout` يتم فقدان سياق `this`. لكنني لا أفهم لماذا يحدث هذا وكيفية إصلاحه. حاولت قراءة الوثائق، لكنها معقدة جداً. من فضلك، اشرح بكلمات بسيطة ما هو `this` في JavaScript وكيفية تمريره بشكل صحيح إلى دالة الاستدعاء. سأكون ممتناً للأمثلة مع الشروحات!
<<>>