دعنا أولاً نلقي نظرة على التفسير الرسمي حول Call () ، "استدعاء طريقة كائن ما واستبدال الكائن الحالي بكائن آخر." بعد قراءة هذا التفسير ، قد تكون أكثر حيرة. انظر مثال:
نسخة الكود كما يلي:
var x = "أنا متغير عالمي" ؛ // تحديد المتغير العالمي x
الدالة A () {// تحديد هيكل فئة الوظائف أ
this.x = "لقد أعلنت ذلك في بنية فئة الوظائف A" ؛
}
// تحديد وظيفة طبيعية وينبثق قيمة المتغير x الوارد في المؤشر الحالي.
وظيفة f () {
تنبيه (this.x) ؛
}
// قيمة الإرجاع هي "لقد أعلنت في بنية فئة الوظائف" أ "
F.Call (جديد A ()) ؛
أفهم أن f.call (جديد A ()) هو نسخ الوظيفة (في الواقع كائن) f إلى الكائن المسمى "جديد A ()" للحلية. في الواقع ، هو نفس نتيجة تحليل الكود التالي:
نسخة الكود كما يلي:
وظيفة A () {
this.x = "لقد أعلنت ذلك في بنية فئة الوظائف A" ؛
تنبيه (this.x) ؛
}
أ () ؛
إنه مجرد نطاق المتغير X مختلف في هذا الوقت. نعم ... يبدو أن لديها القليل من الميراث ، أليس كذلك؟ في المثال أعلاه ، يتم توريث F بالكامل بواسطة كائن قوة المنشئ A. إذا لم يكن هذا كافياً لإظهار أن A.Call (ب) هو وضع الميراث ، فلننظر إلى استخدام أكثر ورثًا.
نسخة الكود كما يلي:
وظيفة f () {
this.a = "a" ؛
this.b = function () {
تنبيه ("ب") ؛
}
}
الدالة e () {
F.Call (هذا) ؛
}
var c = new e () ؛
تنبيه (كاليفورنيا) ؛ // popt a
CB () ؛ // popt b
في هذا المثال ، طالما أن الأصدقاء الذين يعرفون كيفية استخدام المتصفح ، يمكنهم أن يروا أن E يرث تمامًا خصائص وطرق F ، وإلا فلن يتم شرحها ، لأن الصفات A و B غير محددة في E. بعد ذلك ، وفقًا للحس السليم ، لن تظهر هاتان الخصائص في كائن مثيل C من E.