لقد كنت أستخدم JS لكتابة أساليب موجهة نحو الكائنات ذاتية. واجهت مشكلة ، وهي تحديد طريقة ، على النحو التالي:
نسخة الكود كما يلي:
الوظائف ListCommon2 (الأول ، الثاني ، الثالث)
{
this.first = function ()
{
تنبيه ("الأول تفعل"+أولاً) ؛
}
}
listCommon2.do1 = وظيفة (أولاً)
{
// this.first () ؛
تنبيه ("الأول تفعل"+أولاً) ؛
}
listCommon2.prototype.do2 = الدالة (أولاً)
{
// this.first () ؛
تنبيه ("الأول تفعل"+أولاً) ؛
}
ما هو الفرق بين الطريقتين؟ ما هي وظيفة استخدام النموذج الأولي أم لا؟
رمز الاختبار:
نسخة الكود كما يلي:
var t1 = new listCommon2 ("Boil Water 1" ، "Brew Tea 1" ، "Drink 1") ؛
// t1.do1 () ؛ // حدث خطأ عند المكالمة
ListCommon2.do1 ("الماء المسلوق 1") ؛
var t2 = new listCommon2 ("Boil Water 2" ، "Buy Tea 2" ، "Drink 2") ؛
t2.do2 ("غليان الماء 2") ؛ //
// listCommon2.do2 ("غليانج الماء 1") ؛ // حدث خطأ في المكالمة
بعد الاختبار ، تبين أن الطريقة التي لم تستخدم النموذج الأولي تعادل الطريقة الثابتة للفئة ، بحيث يمكن استدعاؤها بهذه الطريقة ، ListCommon2.Do1 ("الماء الغليان 1") ؛ ، ، إذا تم استدعاؤه بهذه الطريقة ، فسيحدث خطأ ، T1.do1 () ؛
على العكس من ذلك ، فإن الطريقة التي تستخدم النموذج الأولي تعادل طريقة المثيل للفئة ولا يمكن استخدامها بعد جديد. ListCommon2.do2 ("Boil Water 1") ؛ هذا سوف يسبب خطأ.
الخلاصة: الطريقة المحددة باستخدام النموذج الأولي تعادل طريقة المثيل للفئة ويجب استخدامها بعد جديد. ستكون قيود الوظيفة التي يمكن استدعاؤها في الوظيفة مشابهة أيضًا لقيود طريقة مثيل الفئة.
استخدام الطرق المحددة دون استخدام النموذج الأولي يعادل الطرق الثابتة للفئة. يمكنك استخدامها مباشرة دون جديد. ستكون قيود الوظائف التي يمكن استدعاؤها في الوظائف مشابهة أيضًا لقيود الطرق الثابتة للفئة.
على سبيل المثال ، لا يمكن استدعاء this.first () ؛