لقد رأيت مؤخرًا مكتبة JS كتبها شخص آخر. كان لدي فجأة بعض الأفكار حول النموذج الأولي والميراث في JS. لقد رأيت بعضهم من قبل ، لكنهم ليسوا واضحين للغاية. لقد استخدمت وقت فراغي هذه الأيام لفهم هذا المجال ، وما زلت أشعر أن هناك خطأ ما في ذلك. الفكرة ليست منظمة ، فقط للمشاركة.
1. مثيل
في JavaScript ، هناك مشغل مثيل ، وهو عامل ثنائي. استخدم الطريقة على instancea extomof a ، وقيمة الإرجاع هي منطقية ، مما يعني تحديد ما إذا كان Instancea مثالًا على A ، وجوهره هو تحديد ما إذا
الدالة f2 () {var f = function () {} var test = new f () ؛ console.log (اختبار مثيل f) ؛ // true console.log ((f.prototype ==== test .__ proto __)) ؛ // true}كلتا المطبوعات أعلاه صحيحة. يشير إلى أن الاختبار هو مثيل f ؛ سمة __proto__ من نقاط الاختبار إلى كائن النموذج الأولي لـ f ، أي خاصية النموذج الأولي لـ f هي كائن ، وهذا الكائن هو مثيل f.
2. الكائنات في JS
كل شيء هو كائن في JS. تنقسم الكائنات إلى كائنات وظيفية وكائنات عادية. الوظائف الشائعة هي في الواقع كائنات وظيفة ، مثل
// function object var f = function () {} var f2 = new function ('str' ، 'console.log (str)') function f3 () {} // Ordinary Object var o = new Object () ؛ var o2 = {} var o3 = new f ()كما هو موضح أعلاه ، فإن F و F2 و F3 هي كائنات دالة ، و O و O2 و O3 هي كائنات عادية.
الفرق بين كائن الوظيفة والكائن العادي:
جميع الكائنات التي تم إنشاؤها باستخدام دالة جديدة () هي كائنات الوظائف ، F و F3 ، وفي النهاية يتم إنشاؤها باستخدام وظيفة جديدة () ؛
عند تحديد كائن ، يحتوي الكائن على بعض الخصائص المحددة مسبقًا ، مثل النموذج الأولي و __proto__. تتوفر سمة النموذج الأولي فقط في كائنات الوظائف ، و __proto__ متاحة لجميع الكائنات. لذلك ، يمكن تحديدها من خلال سمة __proto__ للكائن للكائن لتحديد ما إذا كان كائن وظيفة أو كائن عادي ، مثل
// function object var f = function () {} // Object object var o = new Object () ؛ console.log (f.prototype) ؛ // object {} console.log (O.Prototype) ؛ // undefinedمما سبق ، يمكننا أن نجد أن كائن الوظيفة يحتوي على سمة نموذج أولي ، في حين أن كائن النموذج الأولي للكائنات العادية غير محدد.
3. سلسلة النموذج الأولي
مما سبق ، نعلم أن جميع الكائنات لها سمة __proto__ ، والتي تشير إلى النموذج الأولي للكائن النموذجية لكائن الوظيفة الذي أنشأه. نسمي هذه السلسلة المربوفة باستخدام سمة __proto__ سلسلة النموذج الأولي ، مثل ما يلي سلسلة نموذجية.
الصورة أعلاه ، أخذ الشخص كمثال ، توضح سلسلة النموذج الأولي.
var person = function () {} var person1 = new person () ؛1. الشخص هو كائن وظيفة ، شخص 1 هو مثيل للشخص
2. سمة __proto__ من Person1 هي كائن النموذج الأولي للشخص
3. بما أن الشخص الأولي للشخص الشخصي
4. كائن الكائن النموذجي الخاص بكائن. النموذج هو كائن ، والذي يحتوي أيضًا على سمة __proto__ ، وكائن النموذج الأولي لهذه السمة خالية.
4. بعض الميراث
في JS سنحدد كائن وظيفة ، مثل
var person = function () {}أعلاه حددنا كائن دالة ، والذي ليس له خصائص وهو كائن فارغ. نظرًا لأنه كائن ، يمكنك إضافة خصائص إليه.
var person = function () {} person.name1 = 'js'console.log (person.name1) // jsأضاف الرمز أعلاه سمة اسم إلى الشخص ، وتم تعيين قيمة إلى JS ، ويمكن طباعة قيمة سمة الاسم.
ولكن عندما نقوم بإنشاء مثيل من الشخص 1 ، على النحو التالي
var person = function () {} ؛ person.name1 = 122 ؛ console.log (person.name1) ؛ var person1 = new person () ؛ console.log (person1.name1) ؛ // undefinedيمكنك أن ترى أن الشخص 1 ليس لديه سمة Name1 ، فكيف يمكننا التأكد من أن مثيلات الشخص لديها أيضًا سمة Name1؟
var person = function () {} ؛ person.name1 = 122 ؛ // استخدم كائن النموذج الأولي لإضافة سمات إلى الكائن ، بحيث يكون للحالات هذا الشخص السمة. console.log (person.name1) ؛ var person1 = new person () ؛ console.log (person1.name1) ؛ // 12أعلاه ، يتم استخدام person.protoype.name1 = '12 '، بحيث يكون لجميع الحالات سمة name1. سيتم اعتبار السمات المضافة بهذه الطريقة سمات شائعة للمثال عند إنشاء المثيل.
تستند المقالة أعلاه إلى النماذج الأولية والميراث في JS. كل المحتوى الذي أشاركه معك هو المحرر. آمل أن يعطيك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.