"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > إتقان جافا سكريبت: فهم الاتصال والتطبيق والربط

إتقان جافا سكريبت: فهم الاتصال والتطبيق والربط

تم النشر بتاريخ 2024-08-19
تصفح:697

Mastering JavaScript: Understanding call, apply, and bind.

JavaScript هي لغة برمجة متعددة الاستخدامات وقوية تشكل العمود الفقري لتطوير الويب الحديث. مع تقدم المطورين في رحلة JavaScript، يواجهون مفاهيم أكثر تقدمًا يمكنها تحسين مهاراتهم في البرمجة بشكل كبير. ومن بين هذه المفاهيم أساليب الاستدعاء والتطبيق والربط. تعد هذه الأساليب أدوات أساسية لمعالجة سياق تنفيذ الوظائف وإدارة الكلمة الأساسية this. في هذه المقالة، سنستكشف هذه الطرق بعمق، ونفهم الاختلافات بينها، ونتعلم كيفية استخدامها بفعالية في مشاريع JavaScript الخاصة بك.

فهم سياق الوظيفة (هذا)

قبل التعمق في الاتصال والتطبيق والربط، من المهم فهم مفهوم هذه الكلمة الأساسية في JavaScript

يشير هذا إلى الكائن الذي يقوم بتنفيذ الوظيفة الحالية. تعتمد قيمة هذا على كيفية استدعاء الوظيفة:

  • في طريقة الكائن، يشير هذا إلى الكائن.
  • في الوظيفة، يشير هذا إلى الكائن العام (نافذة في المتصفحات).
  • في الحدث، يشير هذا إلى العنصر الذي استقبل الحدث.
  • في الوضع الصارم ("استخدام صارم"؛)، هذا غير محدد في الوظائف.

ومع ذلك، هناك أوقات تحتاج فيها إلى تعيين قيمة هذا يدويًا. وهنا يأتي دور الاتصال والتطبيق والربط.

طريقة النداء

يتم استخدام طريقة الاستدعاء لاستدعاء دالة ذات قيمة محددة ووسائط مقدمة بشكل فردي. يعد هذا مفيدًا بشكل خاص عندما تريد استعارة أسلوب من كائن آخر أو ضبط السياق ديناميكيًا. بناء الجملة الخاص به هو كما يلي:

function.call(thisArg, arg1, arg2, ...)

إليك مثال لتوضيح كيفية عمل call():

const person = {
  fullName: function(city, country) {
    console.log(this.firstName   " "   this.lastName   " lives in "   city   ", "   country);
  }
};

const john = {
  firstName: "John",
  lastName: "Doe"
};

person.fullName.call(john, "New York", "USA");
// Output: John Doe lives in New York, USA

في هذا المثال، نستخدم call() لاستدعاء دالة الاسم الكامل مع john كقيمة this، ونستعير الطريقة بشكل فعال من كائن الشخص.

طريقة التطبيق

تشبه طريقة application() طريقة call()، ولكنها تأخذ الوسائط كمصفوفة. بناء الجملة الخاص به هو:

function.apply(thisArg, [argsArray])

لنأخذ مثالا.

const person = {
  fullName: function(city, country) {
    console.log(this.firstName   " "   this.lastName   " lives in "   city   ", "   country);
  }
};

const john = {
  firstName: "John",
  lastName: "Doe"
};

person.fullName.apply(john, ["New York", "USA"]);
// Output: John Doe lives in New York, USA

الفرق الرئيسي بين call() و application() هو كيفية التعامل مع الوسائط. يتوقع call() أن يتم تمرير الوسائط بشكل فردي، بينما يتوقع application() أن يتم تمريرها في مصفوفة.

طريقة الربط

على عكس call() و application()، اللذين يستدعيان الوظيفة على الفور، فإن bind() ينشئ وظيفة جديدة مع هذه القيمة الثابتة. يعد هذا مفيدًا بشكل خاص لإنشاء وظائف يمكن استدعاؤها لاحقًا بسياق محدد. بناء الجملة الخاص به هو:

const boundFunction = function.bind(thisArg, arg1, arg2, ...)

إليك مثال لكيفية عمل bind():

const person = {
  firstName: "John",
  lastName: "Doe",
  fullName: function() {
    return this.firstName   " "   this.lastName;
  }
};

const logName = function() {
  console.log(this.fullName());
};

const boundLogName = logName.bind(person);
boundLogName(); // Output: John Doe

في هذا المثال، قمنا بإنشاء دالة جديدة منضمة LogName تحتوي على شخص مرتبط بشكل دائم بهذه القيمة.

حالات المقارنة والاستخدام

  • call: يُستخدم عندما تحتاج إلى استدعاء دالة والتحكم في هذا السياق على الفور، مع تمرير الوسائط بشكل فردي.
  • تطبيق: يشبه الاتصال، ولكن استخدمه عندما يكون لديك مجموعة من الوسائط.
  • bind: يُستخدم عندما تحتاج إلى إنشاء وظيفة يمكن استدعاؤها لاحقًا باستخدام هذا السياق المحدد.

اعتبارات الأداء

على الرغم من أن أدوات الاتصال والتطبيق والربط تعتبر أدوات قوية، إلا أنه من المهم مراعاة الآثار المترتبة على أدائها. يكون bind() بشكل عام أبطأ من call() أو application() لأنه يقوم بإنشاء دالة جديدة. إذا كنت تعمل في أقسام حساسة للأداء في التعليمات البرمجية الخاصة بك، فقد ترغب في استخدام call() أو application() بدلاً من bind().

أفضل الممارسات والمزالق الشائعة

عند استخدام الاتصال والتطبيق والربط، ضع أفضل الممارسات التالية في الاعتبار:

  • كن واضحًا دائمًا بشأن ما يجب أن يشير إليه هذا في وظائفك.
  • استخدم call() أو Apply() عندما تريد استدعاء دالة على الفور بقيمة محددة لهذه القيمة.
  • استخدم bind() عندما تريد إنشاء دالة جديدة مع تثبيت هذه القيمة لاستخدامها لاحقًا.
  • كن حذرًا عند استخدام هذه الطرق مع وظائف الأسهم، حيث أن وظائف الأسهم لها رابط معجمي لا يمكن تغييره.

من الأخطاء الشائعة نسيان أن bind() يُرجع دالة جديدة. تأكد من إعادة تعيين الوظيفة المرتبطة أو استخدامها مباشرة

خاتمة

يعد إتقان الاتصال والتطبيق والربط خطوة مهمة نحو أن تصبح مطور JavaScript ماهرًا. توفر هذه الطرق طرقًا فعالة للتحكم في سياق تنفيذ الوظيفة وإدارة الكلمة الأساسية هذه. من خلال فهم هذه الأدوات واستخدامها بفعالية، يمكنك كتابة تعليمات برمجية أكثر مرونة وقابلة لإعادة الاستخدام وقابلة للصيانة.

بينما تستمر في استكشاف JavaScript، تذكر أن هذه المفاهيم ليست سوى قمة جبل الجليد. تتطور اللغة باستمرار، ويعد البقاء على اطلاع بأحدث الميزات وأفضل الممارسات أمرًا بالغ الأهمية. تدرب على استخدام الاتصال والتطبيق والربط في مشاريعك، وستجد نفسك قريبًا تكتب كود JavaScript أكثر أناقة وفعالية.

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/sagarj521/mastering-javascript-understanding-call-apply-and-bind-4ba5?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3