عند العمل باستخدام JavaScript، قد تصادف ثلاث طرق فعالة: الاتصال والتطبيق والربط. تُستخدم هذه الطرق للتحكم في قيمة هذا في الوظائف، مما يسهل العمل مع الكائنات. دعونا نقسم كل طريقة بأمثلة بسيطة لفهم كيفية عملها.
يسمح لك أسلوب الاستدعاء باستدعاء دالة بقيمة معينة وتمرير الوسائط واحدة تلو الأخرى.
const person = { name: 'Alice', greet: function(greeting) { console.log(`${greeting}, my name is ${this.name}`); } }; const anotherPerson = { name: 'Bob' }; person.greet.call(anotherPerson, 'Hello'); // Output: "Hello, my name is Bob"
في هذا المثال، يؤدي الاتصال إلى تغيير هذه القيمة من شخص إلى شخص آخر، وبالتالي تقوم وظيفة الترحيب بطباعة "مرحبًا، اسمي بوب".
طريقة التطبيق تشبه طريقة الاستدعاء، ولكنها تأخذ الوسائط كمصفوفة بدلاً من واحدة تلو الأخرى.
const person = { name: 'Alice', greet: function(greeting, punctuation) { console.log(`${greeting}, my name is ${this.name}${punctuation}`); } }; const anotherPerson = { name: 'Charlie' }; person.greet.apply(anotherPerson, ['Hi', '!']); // Output: "Hi, my name is Charlie!"
هنا، يؤدي التطبيق أيضًا إلى تغيير هذه القيمة إلى شخص آخر ويسمح لك بتمرير وسائط متعددة كمصفوفة.
لا تستدعي طريقة الربط الوظيفة على الفور. بدلاً من ذلك، تقوم بإرجاع دالة جديدة مرتبطة بهذه القيمة التي يمكنك الاتصال بها لاحقًا.
const person = { name: 'Alice', greet: function() { console.log(`Hi, my name is ${this.name}`); } }; const anotherPerson = { name: 'Diana' }; const greetDiana = person.greet.bind(anotherPerson); greetDiana(); // Output: "Hi, my name is Diana"
في هذا المثال، يقوم bind بإنشاء دالة جديدة لـ GreetingDiana مع ربطها بشخص آخر. عندما تتصل بـ GreetingDiana، تظهر رسالة "مرحبًا، اسمي ديانا".
هذه الأساليب مفيدة عندما تحتاج إلى استعارة أساليب من كائن لاستخدامها مع كائن آخر أو عندما تريد المزيد من التحكم في هذه القيمة في وظائفك.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3