من قبل ، كنت مرتبكًا قليلاً بشأن الميراث النموذجية والبحث في سلسلة النموذج الأولي لـ JavaScript.
على سبيل المثال ، الكود التالي:
نسخة الكود كما يلي:
وظيفة foo () {} ؛
var foo = new foo () ؛
foo.prototype.label = "laruence" ؛
تنبيه (foo.label) ؛ // الإخراج: laruence
تنبيه (foo.label) ؛ // الإخراج: غير محدد
اليوم رأيت الصورة التالية:
تخطيط كائن JavaScript
أيضًا ، انظر في التسلسل الهرمي لكائن JavaScript:
يتم استخدام النموذج الأولي فقط للخصائص الموروثة بواسطة الكائنات/الحالات التي أنشأتها تلك الوظيفة. الوظيفة نفسها لا تستخدم النموذج الأولي المرتبط.
بمعنى آخر ، لا يعمل النموذج الأولي لكائن الوظيفة في عملية البحث في سلسلة النموذج الأولي.
لقد وجدت اليوم تحت Firefox (لأن Firefox تعرض [[النموذج الأولي]] من خلال __proto__) ، الشخص الذي يشارك حقًا في البحث معرف هو __proto__ لكائن الوظيفة ،
نسخة الكود كما يلي:
وظيفة foo () {} ؛
var foo = new foo () ؛
foo .__ proto __. label = "laruence" ؛
تنبيه (foo.label) ؛ // الإخراج: laruence
تنبيه (foo.label) ؛ // الإخراج: غير محدد
ومن الواضح:
نسخة الكود كما يلي:
وظيفة foo () {} ؛
ALERT (foo .__ proto__ === foo.prototype) ؛ // الإخراج: خطأ
بالإضافة إلى ذلك ، أوضح أيضًا ،
نسخة الكود كما يلي:
تنبيه (object.foreach) ؛ // غير محدد
function.prototype.foreach = دالة (كائن ، كتلة ، سياق) {
لـ (VAR Key in Object) {
if (typeof this.prototype [key] == "undefined") {
block.call (السياق ، الكائن [المفتاح] ، المفتاح ، الكائن) ؛
}
}
} ؛
تنبيه (object.foreach) ؛
تنبيه (function.foreach) ؛
التنبيه (object.foreach === function.foreach) ؛ // حقيقي