ما الفرق بين call و apply في JavaScript؟ متى نستخدم كل منهما؟
مرحبًا بالجميع! بدأت في تعلم JavaScript ووجدت الطريقتين call و apply. أفهم أن كلتيهما تسمحان باستدعاء دالة مع سياق محدد (قيمة this)، لكنني لا أستطيع فهم الفرق الجوهري بينهما.
لنفترض أن لدي كائنًا بسيطًا ودالة:
```javascript
const person = {
firstName: 'إيفان',
lastName: 'بيتروف'
};
function greet(greeting, punctuation) {
console.log(`${greeting}, ${this.firstName} ${this.lastName}${punctuation}`);
}
```
يمكنني استدعاء هذه الدالة باستخدام call:
```javascript
greet.call(person, 'مرحبًا', '!'); // مرحبًا, إيفان بيتروف!
```
وباستخدام apply:
```javascript
greet.apply(person, ['مرحبًا', '!']); // مرحبًا, إيفان بيتروف!
```
النتيجة متطابقة. قرأت أن الفرق هو في كيفية تمرير الوسائط: call — مفصولة بفواصل، apply — كمصفوفة. لكن هل هذا مجرد سكر نحوي؟ أم هناك سيناريوهات عملية حيث يكون apply لا غنى عنه؟ على سبيل المثال، سمعت عن "faking" دوال المصفوفات أو العمل معها.