1. احتياطي المعرفة:
1. الوظائف التي تعدد أسماء السمات:
(1) ل ... في: يمكنك اجتياز جميع الخصائص التعويضية في الكائن (بما في ذلك الخصائص الخاصة والخصائص الموروثة) في جسم الحلقة.
(2) Object.Keys (): إرجاع صفيف (سمات قابلة للتعداد)
(3) object.getownpropertynames (): جميع الخصائص الخاصة
3. خصائص السمات: سمات البيانات وسمات الملحقات
(1) سمات البيانات: قيمة قابلة للتكوين قابلة للكتابة
سمة البيانات لها قيمة بسيطة واحدة فقط ؛
(2) سمات الملحقات: الكتابة (تعيين) ، قراءة (الحصول) ، التعداد ، قابل للتكوين
الملحقات غير قابلة للكتابة (أي لا توجد ميزة قابلة للكتابة).
إذا كانت السمة تحتوي على طريقة محددة ، فإن هذه السمة قابلة للكتابة وهناك طريقة GET ، فإن هذه السمة قابلة للقراءة.
4. طرق لتحديد خصائص السمة: Object.DefineProperty (كائن ، سمة ، كائن الوصف)
5.
2. مثال
1. وفقًا لاستخدام ... في ، يمكننا كتابة طريقة لمحاكاة "الميراث":
<script type = "text/javaScript"> var child = {} ؛ var mother = {name: "Zhangzhiying" ، lalsage: 21 ، الجنس: "أنثى"} ؛ وظيفة تمديد (الهدف ، المصدر) {for (var p في المصدر) {target [p] = source [p] ؛ } الهدف الإرجاع ؛ } تمتد (الطفل ، الأم) ؛ console.log (طفل) ؛ // <strong> كائن {name: "Zhangzhiying" ، LASTAGE: 21 ، الجنس: "أنثى"} </strong> </script>2. استخدم في In in to loop من خلال خصائص كائن النموذج الأولي ، ثم تعيين القيم إلى كائناتنا الفارغة واحدة تلو الأخرى ، وبالتالي تحقيق "الميراث". هذه الفكرة صحيحة جدا. دعنا نعدل المثال أعلاه:
<script type = "text/javaScript"> var child = {} ؛ var mother = {name: "Zhangzhiying" ، lalsage: 21 ، <strong> تعيين العمر (القيمة) {this.lastage = value ؛ } ، الحصول على العمر () {return this.lastage+1 ؛ } ، </strong> الجنس: "أنثى"} ؛ <br> <strong> mother.age = 15 ؛ </strong> // هناك طريقة مجموعة ، لها وظيفة قابلة للكتابة (الهدف ، المصدر) {for (var p في المصدر) {target [p] = source [p] ؛ } الهدف الإرجاع ؛ } تمتد (الطفل ، الأم) ؛ console.log (طفل) ؛ // <strong> كائن {name: "Zhangzhiying" ، LASTAGE: 15 ، العمر: 16 ، الجنس: "أنثى"} </strong> </script>يمكنك أن ترى أنه يتم استخدام زوج من المجموعات في الكود ، احصل ؛ حيث العمر هو سمة ملحق.
نتيجة التشغيل: كائن عادي لا يحتوي على مجموعة ، احصل.
الخلاصة: "الميراث" الذي تم تنفيذه من خلال In in لا يتعامل مع مجموعة وحصل ، فإنه يحول سمة الملحق (العمر) إلى سمة بيانات ثابتة.
3. تعيين سمات البيانات للكائن الأم
<script type = "text/javaScript"> var child = {} ؛ var mother = {name: "Zhangzhiying" ، lalsage: 21 ، set age (value) {this.lastage = value ؛ } ، الحصول على العمر () {return this.lastage+1 ؛ } ، الجنس: "أنثى"} ؛ Object.DefineProperty (الأم ، "LASTAGE" ، {false: false}) ؛ // تعيين LASTAGE حتى لا تكون قابلة للكتابة الأم. // تعيين غير صالح ، لأن قيمة LASTAGE لا تزال دون تغيير ، تظل LASTAGE+1 دون تغيير ، أي أن العمر يبقى وظيفة دون تغيير (الهدف ، المصدر) {for (var p في المصدر) {target [p] = source [p] ؛ } الهدف الإرجاع ؛ } تمتد (الطفل ، الأم) ؛ console.log (طفل) ؛ // object {name: "Zhangzhiying" ، lalsage: 21 ، العمر: 22 ، الجنس: "أنثى"} child.lastage = 12 ؛ // توضح النتيجة أن التغييرات الأخيرة ، مما يشير إلى أن الطفل. lastage لا "يرث" ميزة mother.lastage. دعونا نستخدم طريقة getOwNPropertyDesriptor () لتأكيد <br> console.log (object.geto<em id = __ mcedel> </script> </em>
الخلاصة: لتحقيق الميراث ، ما زلنا بحاجة إلى حل المشكلة -> "الميراث" خصائص السمة.
4. نسخة كاملة
<script type = "text/javaScript"> var child = {} ؛ var mother = {name: "Zhangzhiying" ، lalsage: 21 ، set age (value) {this.lastage = value ؛ } ، الحصول على العمر () {return this.lastage+1 ؛ } ، الجنس: "أنثى"} ؛ Object.DefineProperty (الأم ، "LASTAGE" ، {false: false}) ؛ mother.age = 15 ؛ <span style = "color: #333399"> <strong> وظيفة تمديد (الهدف ، المصدر) {var names = object.getownPropertyNames (source) ؛ // احصل على جميع أسماء الخصائص لـ (var i = 0 ؛ i <names.length ؛ i ++) {if (أسماء [i] في الهدف) متابعة ؛ // إذا كانت هذه الخاصية موجودة ، تخطي (في ميراث النموذج الأولي ، إذا تم تكرار سمة الخاصية الخاصة وخاصية كائن النموذج الأولي ، تحتفظ بالخاصية الخاصة) var desc = object.getownpropertyDescriptor (المصدر ، الأسماء [i]) ؛ // احصل على كائن واصف السمة الأم (أي مجموعة خصائص السمة ، ممثلة بواسطة كائن الوصف في es5) object.defineProperty (الهدف ، الأسماء [i] ، desc) ؛ // احصل على كائن واصف الأم إلى تعريف سمة الطفل} إرجاع الهدف ؛ } </strong> </span> تمتد (طفل ، الأم) ؛ console.log (طفل) ؛ child.lastage = 12 ؛ console.log (object.getOntOnpropertyDescriptor (child ، "lastage")) ؛ console.log (طفل) ؛ </script>النتائج النهائية:
يمكنك أن ترى بوضوح الطباعة ثلاث مرات ، والطفل "الموروث" للضبط والحصول عليه ، ولم تتغير القيمة النهرية ، ويمكن للكتابة أيضا خطأ.
ملخص: أقرأ "الدليل الموثوق لجافا سكريبت" مؤخرًا. سألخص بعض التجارب. إذا كانت هناك أي أخطاء ، فالرجاء تصحيحني والتعلم وتحقيق التقدم معًا ~
التفسير التفصيلي أعلاه لميراث JavaScript باستخدام وظائف هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.