1. تعريف الطريقة
طريقة الاتصال:
بناء الجملة: اتصل ([thisobj [، arg1 [، arg2 [، [، .argn]]]]]))
التعريف: اتصل بأسلوب كائن لاستبدال الكائن الحالي بكائن آخر.
يوضح:
يمكن استخدام طريقة الاتصال لاستدعاء طريقة بدلاً من كائن آخر. تقوم طريقة المكالمة بتغيير سياق الكائن لوظيفة من السياق الأولي إلى كائن جديد محدد بواسطة ThisoBJ.
إذا لم يتم توفير معلمة thisoBJ ، فسيتم استخدام الكائن العالمي كـ thisoBJ.
تطبيق الطريقة:
بناء الجملة: تطبيق ([thisobj [، argarray]])
التعريف: تطبيق طريقة واحدة لكائن معين واستبدل الكائن الحالي بكائن آخر.
يوضح:
إذا لم يكن Argarray صفيفًا صالحًا أو لم يكن كائن وسيطات ، فسيتم إنشاء Typeerror.
إذا لم يتم تقديم وسيطات ، فسيتم استخدام الكائن العالمي كـ thisoBJ ولا يمكن تمرير أي وسيطات.
2. أمثلة شائعة
أ.
نسخة الكود كما يلي:
وظيفة إضافة (أ ، ب)
{
تنبيه (A+B) ؛
}
الوظيفة الفرعية (أ ، ب)
{
تنبيه (AB) ؛
}
add.call (sub ، 3،1) ؛
المعنى في هذا المثال هو استبدال sub بـ Add ، add.call (sub ، 3،1) == إضافة (3،1) ، وبالتالي فإن نتيجة التشغيل هي: التنبيه (4) ؛ // ملاحظة: الوظيفة في JS هي في الواقع كائن ، واسم الوظيفة هو مرجع إلى كائن الوظيفة.
ب.
نسخة الكود كما يلي:
وظيفة animal () {
this.name = "Animal" ؛
this.showname = function () {
تنبيه (this.name) ؛
}
}
وظيفة Cat () {
this.name = "cat" ؛
}
var Animal = New Animal () ؛
var cat = new cat () ؛
// من خلال طريقة الاتصال أو التطبيق ، يتم تسليم طريقة DoorkAme () التي تنتمي في الأصل إلى الكائن الحي إلى كائن القط للاستخدام.
// نتيجة الإدخال هي "القط"
Animal.showname.call (Cat ، "،") ؛
//animal.showname.apply (cat ، []) ؛
المكالمة تعني وضع طريقة الحيوان على CAT للتنفيذ. اتضح أن CAT لا يحتوي على طريقة dhowAME (). الآن ، وضع طريقة animale () على CAT على تنفيذها ، لذلك يجب أن يكون اسم.
ج. إدراك الميراث
نسخة الكود كما يلي:
وظيفة Animal (اسم) {
this.name = name ؛
this.showname = function () {
تنبيه (this.name) ؛
}
}
دالة القط (الاسم) {
Animal.Call (هذا ، الاسم) ؛
}
var cat = New Cat ("Black Cat") ؛
cat.showname () ؛
Animal.Call (هذا) يعني استخدام كائن حيوان بدلاً من هذا الكائن. ثم ألا يكون هناك كل خصائص وطرق الحيوانات في القط؟ يمكن لكائن CAT استدعاء طرق وخصائص الحيوانات مباشرة.
د. ميراث متعدد
نسخة الكود كما يلي:
وظيفة class10 ()
{
this.showsub = وظيفة (أ ، ب)
{
تنبيه (AB) ؛
}
}
وظيفة class11 ()
{
this.showadd = وظيفة (أ ، ب)
{
تنبيه (A+B) ؛
}
}
وظيفة class2 ()
{
class10.call (هذا) ؛
class11.call (هذا) ؛
}
الأمر بسيط للغاية ، باستخدام مكالمتين لتحقيق ميراث متعدد
بالطبع ، هناك طرق أخرى لروث JS ، مثل استخدام سلاسل النموذج الأولي ، والتي لا تقع في نطاق هذه المقالة ، ولكنها تشرح فقط استخدام المكالمة هنا. الحديث عن المكالمة ، بالطبع هناك أيضا تطبيق. هاتان الطريقتان تعني أساسا نفس الشيء. الفرق هو أن المعلمة الثانية للمكالمة يمكن أن تكون من أي نوع ، في حين يجب أن تكون المعلمة الثانية للتطبيق صفيفًا أو وسيطًا
و Callee ، المتصل ..
تلخيص:
ببساطة: أوجه التشابه: آثار الطريقتين هي نفسها بالضبط
نقاط مختلفة: المعلمات التي تم تمريرها بواسطة الطريقة مختلفة