أولاً ، حدد كائن OBJ ، والنموذج الأولي للكائن هو OBJ._PROTO_. يمكننا استخدام طريقة getPrototypeOF في ES5 للاستعلام عن النموذج الأولي لـ OBJ. نثبت ما إذا كان النموذج الأولي لـ OBJ مساوياً للكائن. النمط النمط لإثبات ما إذا كان النموذج الأولي لـ OBJ موجودًا. الجواب يعود صحيح ، لذلك هو موجود. ثم نحدد وظيفة foo () ، وأي وظيفة لها كائن النموذج الأولي الخاص بها ، أي النموذج الأولي للوظيفة. يمكننا إضافة أي سمات إلى النموذج الأولي للوظيفة ، ثم مشاركة سماتها بواسطة كائن جديد تم تحديده (سيتم تقديم مثالين التاليين بالتفصيل).
دالة foo () {} foo.prototype.z = 3 ؛ var obj = new foo () ؛ obj.x = 1 ؛ obj.y = 2 ؛ obj.x //1obj.y //2obj.z // 3typeof obj.tostring ؛ //functionobj.valueof () ؛ // foo {x: 1 ، y: 2 ، z: 3} obj.hasownproperty ('z') ؛ //خطأ شنيعهنا ، يشير النموذج الأولي لـ OBJ (_proto_) إلى خاصية النموذج الأولي لوظيفة FOO ، والنموذج الأولي لـ Foo.Prototype يشير إلى Object.prototype ، ونهاية سلسلة النموذج الأولي خالية. من خلال HasownProperty ، يمكننا التحقق مما إذا كانت خاصية Z موجودة على OBJ. يظهر خطأ. لا توجد خاصية Z على OBJ ، ولكن من خلال البحث عن سلسلة النموذج الأولي الخاص بها ، وجدنا أنه موجود على النمط foo.prototype ، لذلك obj.z = 3 ، وللحالة الأولى obj.valueof () و tostring كلاهما على كلاهما. بالطبع ، باستثناء الحالة الخاصة التالية ،
var obj2 = object.create (null) ؛ obj2.valueof () ؛ // غير محدد
Object.create () ينشئ كائن فارغ ، ويشير النموذج الأولي لهذا الكائن إلى المعلمات. يوضح لك المثال الشامل التالي كيفية تنفيذ فصل لروث فصل آخر
// إعلان شخص مُنشئ شخص (اسم ، العمر) {this.name = name ؛ هذا. ! ') ؛} ؛ وظيفة الطالب (الاسم ، العمر ، classnum) {person.call (هذا ، الاسم ، العمر) ؛ this.classnum = classnum ؛} // إنشاء كائن فارغ student.prototype = object.create (person.prototype) ؛ // constructor يحدد الوظيفة لإنشاء كائن. student.prototype.constructor = student ؛ student.prototype.hi = function () {console.log ('hi ، اسمي'+this.name+'، عمري هو'+this.age+'وفصلي هو'+this.classnum) ؛} ؛ '+sub) ؛} ؛ // instantiate a consuge bosnvar bosn = new student (' Bosn '، 27 ،' Class 3 ') ؛ Bosn.hi () ؛ // مرحبًا ، اسمي Bosn ، عمري 27 وفصل هو الفئة 3BOSN.LEGS_NUM ؛ //2bosn.walk () ؛ // Bosn يسير! Bosn.Learns ('Math') ؛ // بوسن يتعلم الرياضياتيشير الشخص المُنشئ والطالب إلى الكائن الذي تم إنشاءه (BOSN) ، والنموذج الأولي لهذا الكائن إلى النموذج الأولي للمنشئ.
نستخدم طريقة الكائن. ميزة كتابة هذا هو أنه يمكننا إنشاء أي سمة من studnet.prototype من قبل أنفسنا دون التأثير على الشخص. النمط النمط ، ويمكن أن يرثوا السمات الأصلية على الشخص. إذا قمت بكتابة person.prototype = student.prototype مباشرة ، فإن كلاهما يشير إلى كائن في نفس الوقت. أثناء إضافة سمات إلى الطالب. النمط المحدد ، ستتم إضافة نفس السمات أيضًا إلى سلسلة النماذج الأولية للشخص.
بالنسبة لطريقة الاتصال في طالب المنشئ ، يشير هذا الداخلية إلى الكائن الذي تم إنشاؤه للطالب الذي تم إنشاؤه حديثًا ، ويرث المكالمة.
student.prototype.constructor = الطالب ، فإن معنى هذه الجملة هو تحديد أن الطالب هي الوظيفة التي تنشئ كائن الطالب. إذا لم تكتب هذه الجملة ، فإن وظيفة الكائن لا تزال شخصًا.
هناك ثلاث طرق لتنفيذ الميراث.
وظيفة الشخص (الاسم ، العمر) {this.name = name ؛ this.age = Age ؛} function student () {} student.prototype = person.prototype ؛ //1student.prototype = object.create (person.prototype) ؛ //2student.prototype = new person () ؛ // 3سلسلة النموذج الأولي JS أعلاه وتحليل الميراث (التجربة الأولى) هي كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.