التوصيات ذات الصلة: برنامج تعليمي لجافا سكريبت
(المفهوم) تشير سلسلة النموذج الأولي إلى قائمة مرتبطة مكونة من بعض النماذج الأولية من خلال مؤشرات __proto__. يمكن لسلسلة النموذج الأولي أن تخدم الكائنات التي ترغب في مشاركة البيانات في سلسلة النموذج الأولي ويتم استخدامها لتنفيذ آلية وراثة جافا سكريبت.
(مؤشر سلسلة النموذج الأولي) المؤشرات المشاركة في سلسلة النموذج الأولي:
الدالة أ() { } دع a1 = جديد A() دع a2 = جديد A() دع a3 = جديد A() // ستعمل سطور التعليمات البرمجية هذه على إنشاء سلسلة النموذج الأولي الموضحة أدناه
Let A = { امتحان: "" } دع a1 = Object.create(A) دع a2 = Object.create(A) دع a3 = Object.create(A) // تتوافق أسطر التعليمات البرمجية هذه مع سلسلة النموذج الأولي الموضحة أدناه
الدالة أ() { } دع a1 = جديد A() دع a2 = جديد A() دع a3 = جديد A() // ستعمل سطور التعليمات البرمجية هذه على إنشاء سلسلة النموذج الأولي الموضحة أدناه
يمكن تحليل سلسلة النموذج الأولي التي تتضمن الميراث باستخدام رسم تخطيطي مبسط
// استخدم وضع التركيبة الطفيلية لتنفيذ الوظيفة الموروثة C() {} الدالة ب () {} B.prototype = جديد C() الدالة أ () {} A.prototype = جديد B() دع a1 = جديد A() دع a2 = جديد A() دع a3 = جديد A()
سلسلة النموذج الأولي نقطة نهاية سلسلة النموذج الأولي فارغة، ولا تشير إلى كائن النموذج الأولي
.تم شرح ديناميكيات النموذج الأولي بالتفصيل في "البرمجة الموجهة للكائنات". ويتضمن بشكل أساسي إعادة كتابة النموذج الأولي وتعديله. وهنا بعض الأمثلة.
المثال 1 - ديناميكيات النموذج الأولي
var A = function() {}; A.prototype.n = 1; فار ب = جديد أ(); أ.النموذج الأولي = { ن: 2، م: 3 } فار ج = جديد أ(); console.log(bn); // 1 console.log(bm);// غير محدد console.log(cn); console.log(cm); // 3
مثال 2 - ديناميكيات النموذج الأولي والسلسلة السفلية للنموذج الأولي
var F = function() {}; Object.prototype.a = function() { console.log('a'); }; Function.prototype.b = وظيفة () { console.log('ب'); } فار f = جديد F(); فا ()؛ // أ fb(); // السمة b غير موجودة Fa(); Fb(); // b
ارجع إلى الصورة الأولى في "مخطط سلسلة النموذج الأولي الذي لا يتضمن الوراثة" المذكور أعلاه، يمكنك رسم مشكلة تحليل المخطط المرجعي المبسط التالي.
المثال 3 - ديناميكيات النموذج الأولي ووظيفة السلسلة السفلية للنموذج الأولي
الشخص (الاسم) { this.name = name } دع p = شخص جديد('توم'); console.log(p.__proto__) // Person.prototype console.log(Person.__proto__) // Function.prototype
المثال 4 - ديناميكيات النموذج الأولي وسلسلة النموذج الأولي
var foo = {}, F = function(){}; Object.prototype.a = 'القيمة أ'؛ Function.prototype.b = 'القيمة ب'; كائن.النموذج الأولي = { أ: "القيمة أ" } الوظيفة.النموذج الأولي = { ب: "القيمة ب" } console.log(foo.a); // القيمة أ console.log(foo.b); // غير محدد console.log(Fa); // القيمة أ console.log(Fb); // تشير القيمة b
إلى الصورة الأولى في "مخطط سلسلة النموذج الأولي الذي لا يتضمن الوراثة" المذكور أعلاه لرسم مشكلة تحليل المخطط المرجعي المبسط التالي. نظرًا لأن foo وF يربطان نماذجهما الأولية عند الإعلان عنها، فإنهما يحصلان على عنوان النموذج الأولي المخزن في ذاكرة الكومة من خلال المؤشر المخزن في ذاكرة المكدس. أولاً، سيتم تعديل النموذج الأولي من خلال عملية التعديل للنموذج الأولي الموجود في ذاكرة الكومة، ولا يزال بإمكان F الوصول إلى النتيجة المعدلة من خلال مؤشر ذاكرة المكدس. الخطوة الثانية هي إعادة كتابة النموذج الأولي في JS، وهي عبارة عن "عمليات نقل القيمة". بعد إعادة كتابة النموذج الأولي، افتح أولاً مساحة جديدة في ذاكرة الكومة لتخزين النموذج الأولي الجديد، ثم افتح مساحة جديدة في ذاكرة المكدس. لتخزين المؤشر في ذاكرة الكومة. في هذا الوقت، نظرًا لأن مؤشرات ذاكرة المكدس التي يحملها foo وF تختلف عن مؤشرات ذاكرة المكدس الجديدة، لا يمكن لـ foo وF الوصول إلى النموذج الأولي المعاد كتابته.
التوصيات ذات الصلة: البرنامج التعليمي لتعلم JavaScript
ما ورد أعلاه هو شرح مفصل لسلسلة نماذج JavaScript بالصور والنصوص. لمزيد من المعلومات، يرجى الانتباه إلى المقالات الأخرى ذات الصلة على موقع PHP الصيني!