في ECMascript V3 ، يتم تعريف هاتين الطريقتين للنموذج الأولي للوظيفة. وظائف هاتين الطريقتين هي نفسها: يمكن استخدام هاتين الطريقتين استدعاء وظائف مثل استدعاء طرق الكائن الأخرى. تم نسخ هذه الجملة من الكتاب ، على الأقل لم أفهم معنى هذا.
دعنا نتحدث عن بسيطة وسهلة الفهم. دعونا أولاً نلقي نظرة على الكود:
نسخة الكود كما يلي:
مقدمة الوظيفة (الاسم والعمر)
{
document.write ("اسمي"+name+". أنا"+العمر) ؛
}
var p = New People () ؛
مقدمة. Call (p ، "Windking" ، 20) ؛
دعنا نتحدث عن الكود أعلاه. بعد استخدام المكالمة ، تصبح مقدمة طريقة p. أتساءل إذا كنت تفهم هذا؟ باستخدام طريقة الاتصال ، فإن الكود أعلاه يعادل هذا الرمز:
نسخة الكود كما يلي:
وظيفة الناس (الاسم ، العمر)
{
this.name = name ؛
this.age = العمر ؛
this.introduce = function () {
document.write ("اسمي"+name+". أنا"+العمر) ؛
} ؛
}
هل تفهم المعنى؟ تطبيق نفس الوظيفة.
حسنًا ، بغض النظر عن هذه الطريقة التي يمكن استخدامها في الممارسة العملية ، دعنا نتحدث عن القواعد النحوية أولاً.
تقبل المكالمة معلمة واحدة على الأقل. تشير المعلمة الأولى من المكالمة إلى الكائن الذي تحتاجه. على سبيل المثال ، في المثال أعلاه ، تأمل طريقة المقدمة في أنه يمكن استدعاؤه بواسطة الكائن P ، لذلك يتم استخدام P كمعلمة أول للمكالمة. العدد المتبقي من المعلمات تعسفي ، ويستخدم كمعلمة لطريقة المقدمة. الطلب في الترتيب المعلن من خلال المعلمة تعريف. على سبيل المثال ، repuffe.call (p ، "Windking" ، 20) ، إذا تم تقديم طريقة مثال لـ p ، فهذا ما يعنيه: p.introduce ("Windking" ، 20). هل تفهم؟ تذكر أن ترتيب المعلمات الواردة يجب أن يكون متسقًا مع ترتيب معلمات إعلان الوظيفة.
بعد فهم المكالمة ، من السهل فهم طريقة التطبيق. الفرق الوحيد بين التطبيق والمكالمات هو أن المكالمة تقبل معلمة واحدة على الأقل ، في حين أن التطبيق يقبل فقط معلمتين. المعلمة الأولى هي نفس المكالمة ، والمعلمة الثانية هي مجموعة مع انقطاع. على سبيل المثال ، يمكن إعادة كتابة مقدمة. هل تفهم هذا الوقت؟
إذن ما هي استخدامات هاتين الطريقتين؟ إذا كنا نريد فقط تنفيذ الوظيفة أعلاه ، أليس من الأفضل تنفيذ المقدمة كأشخاص؟
ألخص التطبيق إلى قسمين:
1. طريقة المشاركة. دعونا نلقي نظرة على الرمز أولاً:
نسخة الكود كما يلي:
مقدمة الوظيفة (الاسم والعمر)
{
document.write ("اسمي"+name+". أنا"+العمر) ؛
}
هذه طريقة ذاتية التقنية. الآن ، دعنا نقول أن لدينا فصل صبي وفئة فتاة (أنا فقط من أجل العرض التوضيحي هنا ، في الممارسة العملية ، سيتم استخدام فئة الوالدين للشعب) ، لأن مقدمةهم هي نفسها ، حتى نتمكن من مشاركة هذه الطريقة.
نسخة الكود كما يلي:
وظيفة فتى ()
{
this.boyintroduce = function () {
مقدمة. Call (هذا ، الاسم ، العمر) ؛
} ؛
}
وبالمثل ، فإن الشيء نفسه صحيح في الفتاة ، حتى نتمكن من تجنب كتابة التعليمات البرمجية. في الواقع ، هذا بعيد المنال بعض الشيء ، لأنه يمكننا كتابته على النحو التالي:
نسخة الكود كما يلي:
وظيفة فتى ()
{
this.boyintroduce = function () {
مقدمة (الاسم ، العمر) ؛
}
}
ولكن في هذا الوقت ، إذا استخدمنا تطبيق ، فسيبدو أبسط بكثير:
نسخة الكود كما يلي:
وظيفة فتى ()
{
this.boyintroduce = function () {
مقدمة. apply (هذا ، الحجج) ؛
} ؛
}
أليس هذا أبسط بكثير؟ إذا كان هناك العديد من المعلمات ، فلا تحتاج إلى كتابة سلسلة من المعلمات الكثيفة!
2. مكالمة النطاق المتقاطع
شاهد مثالًا بسيطًا (لتقديم العرض فقط ، لا قيمة):
نسخة الكود كما يلي:
وظيفة فتى (الاسم والعمر)
{
this.boyintroduce = function () {
document.write ("اسمي"+name+". أنا"+العمر) ؛
}
}
وظيفة الفتاة (الاسم ، العمر)
{
}
هذا فتى وفتاة ، ثم نكتب الرمز التالي:
var b = boy new ("Windking" ، 20) ؛
BoBoyIntroduce () ؛
لا يوجد اعتراض على هذا. لنفترض أن هناك فتاة ترغب في تقديم نفسها في يوم من الأيام وتستخدمها بالصدفة ، ثم لا توجد حاجة لي لتعديل فئة الفتاة ، لأن الفتيات الأخريات خجولن ولا يرغبن في تقديم أنفسهن. ثم يمكنني القيام بذلك في هذا الوقت.
var g = فتاة جديدة ("Xuan" ، 22) ؛
مقدمة. Call (G ، "Xuan" ، 22) ؛
3. الاستخدام الحقيقي - الميراث
حسنًا ، ما سبق كلها حيل صغيرة ، وهي ليست مكانًا للأناقة. فيما يلي المكالمة والتطبيق الأكثر استخدامًا ، والتي تستخدم للميراث الهيكلي.