مقدمة Call () في موقع Mozilla الرسمي هي:
نسخة الكود كما يلي:
تستدعي طريقة Call () وظيفة أو طريقة مع هذه القيمة المحددة والعديد من قيم المعلمة المحددة.
استدعاء () بناء الجملة
نسخة الكود كما يلي:
fun.call (thisarg [، arg1 [، arg2 [، ...]]])
Call () المعلمة
هذا
نسخة الكود كما يلي:
هذه القيمة المحددة عند تشغيل وظيفة المرح. تجدر الإشارة إلى أن هذه القيمة المحددة لا تعني بالضرورة هذه القيمة الحقيقية عند تنفيذ الوظيفة. إذا كانت هذه الوظيفة في الوضع غير الشجري ، فإن هذه القيمة المحددة على أنها فارغة وغير محددة ستشير تلقائيًا إلى الكائن العالمي (كائن النافذة في المتصفح) ، وستشير هذه القيمة بالقيمة الأصلية (الرقم ، السلسلة ، القيمة المنطقية) إلى كائن التغليف التلقائي للقيمة الأصلية.
Arg1 ، Arg2 ، ...
نسخة الكود كما يلي:
قائمة المعلمات المحددة.
Call () طريقة في JavaScript
دعونا لا نولي اهتمامًا للتفسيرات المعقدة أعلاه ، ابدأ هذه العملية خطوة بخطوة.
مثال على طريقة الاتصال ()
لذلك كتبت مرحبًا آخر ، عالم:
نسخة الكود كما يلي:
وظيفة طباعة (p1 ، p2) {
console.log (p1 + '' + p2) ؛
}
طباعة ("مرحبا" ، "العالم") ؛
print.call (غير محدد ، "Hello" ، "World") ؛
على النقيض من ذلك ، فإن الطريقتين لها نفس الإخراج ، على النقيض من ذلك ، تمر طريقة الاتصال أيضًا غير المحدد.
بعد ذلك ، دعونا نلقي نظرة على مثال آخر.
نسخة الكود كما يلي:
var obj = function () {} ؛
وظيفة طباعة (p1 ، p2) {
console.log (p1 + '' + p2) ؛
}
print.call (obj ، "Hello" ، "World") ؛
ولكن هنا ، ما مررنا به لا يزال غير محدد ، لأن غير المحدد في المثال السابق هو أن المعلمة تحتاج إلى تمريرها. لا يوجد انعكاس حقيقي لاستخدام المكالمة هنا ، انظر مثال أفضل.
نسخة الكود كما يلي:
وظيفة طباعة (اسم) {
console.log (this.p1 + '' + this.p2) ؛
}
var H = {p1: "Hello" ، p2: "World" ، print: print} ؛
H.Print ("FD") ؛
var h2 = {p1: "hello" ، p2: "world"} ؛
print.call (H2 ، "Nothing") ؛
يتم استدعاء المكالمة عن طريق استعارة أساليب الآخرين وأشياءها ، تمامًا مثل الاتصال بنفسك. في H.Print ، عندما تسمى وظيفة كطريقة ، سيشير هذا إلى الكائن ذي الصلة. ولكن في هذا المثال ، لم نفهم ما إذا كان H2 يسمى الطباعة أو طباعة تسمى H2. لذلك نقلت مثال موزيلا
نسخة الكود كما يلي:
وظيفة المنتج (الاسم ، السعر) {
this.name = name ؛
this.price = السعر ؛
إذا (السعر <0)
رمي RangeError ("لا يمكن إنشاء منتج" + name + "" بسعر سلبي ") ؛
إرجاع هذا ؛
}
وظيفة الغذاء (الاسم ، السعر) {
product.call (هذا ، الاسم ، السعر) ؛
this.category = 'food' ؛
}
food.prototype = منتج جديد () ؛
var cheese = new food ('feta' ، 5) ؛
console.log (الجبن) ؛
هنا يمكننا حقًا فهم الكائنات التي تستدعي الطريقة. في المثال ، ستتم إضافة مثيلات الكائنات التي تم إنشاؤها باستخدام مُنشئ الطعام للاسم والسعر المضافة في مُنشئ المنتج ، ولكن يتم تعريف سمة الفئة في المنشئ المعني.
نسخة الكود كما يلي:
وظيفة طباعة (اسم) {
console.log (this.p1 + '' + this.p2) ؛
}
var h2 = function (no) {
this.p1 = "Hello" ؛
this.p2 = "World" ؛
print.call (هذا ، "لا شيء") ؛
} ؛
H2 () ؛
هنا يتم استخدام H2 كمستقبل للاتصال بطباعة الوظيفة. كما هو الحال في مثال الغذاء ، في مُنشئ الطفل ، يمكنك تنفيذ الميراث عن طريق استدعاء طريقة المكالمات الخاصة بالمقدم الأصل.
بالنسبة لمزايا طريقة الاتصال ، يتم تقديمه في "JavaScript الفعالة".
1. استخدم طريقة الاتصال لتخصيص المتلقي للاتصال بالوظيفة.
2. استخدم طريقة المكالمات لاستدعاء طريقة غير موجودة في الكائن المحدد.
3. استخدم طريقة الاتصال لتحديد وظائف الترتيب العالي التي يسمح للمستخدمين بتحديد المستلمين لوظائف رد الاتصال.