دعونا نفرز التغليف والميراث في JS الموجهة نحو الكائن.
1. التغليف
هناك العديد من طرق التنفيذ للتغليف في JS ، وهنا هناك عدد قليل من تلك الشائعة الاستخدام.
1.1 كائن توليد النمط الأصلي
اكتب أعضائنا مباشرة في الكائن وأعيدهم بوظيفة. العيوب: من الصعب أن نرى أنه مثال على النمط.
شفرة:
نسخة الكود كما يلي:
وظيفة stu (الاسم ، النتيجة) {
يعود {
الاسم: الاسم ،
النتيجة: النتيجة
}
}
var stu1 = Stu ("Zhang San" ، 80) ؛
var stu2 = stu ("li si" ، 90) ؛
console.log (stu1.name) ؛ // Zhang San
1.2 إنشاء كائنات نمط مصنوعة
يساعدنا JS في توفير نمط لتوليد الكائنات باستخدام المنشآت. ما يسمى "المنشئ" هو في الواقع وظيفة عادية ، ولكن يتم استخدام هذا المتغير داخليًا. عند استخدام الكلمة الرئيسية الجديدة لإنشاء مثيل للمُنشئ ، سيتم ربط هذا المتغير بكائن المثيل.
قم بتحميل الكود مباشرة:
نسخة الكود كما يلي:
وظيفة stu (الاسم ، النتيجة) {
this.name = الاسم ،
this.score = النتيجة
}
var stu1 = New Stu ("Zhang San" ، 80) ؛
var stu2 = new Stu ("li si" ، 90) ؛
console.log (stu1.name + "/" + stu2.score) ؛ // Zhang San90
console.log ((stu1.constructor == stu) + "/" + (stu2.constructor == stu)) ؛ // صحيح
console.log ((stu1 مثيل stu) + "/" + (stu2 مثيل stu)) ؛ // صحيح
ليس من الصعب أن نرى أن مُنشئ JS يقوم بإنشاء كائنات و C# مع الفئة يقوم بإنشاء كائنات. كلاهما يستخدم قوالب لتحديد أعضاء الكائنات على إنشاء مثيل لها من خلال كلمات رئيسية جديدة.
إنشاء نفس كائن STU باستخدام رمز C#
نسخة الكود كما يلي:
فئة ستو
{
اسم السلسلة العامة ؛
النتيجة المزدوجة العامة ؛
}
حسنًا ، هنا هو الكائن الأساسي. لذا ، نحتاج الآن إلى طريقة تكون فيها جميع الكائنات شائعة ، ولدينا هذه الطريقة فقط. (لا تنشئ مرارًا وتكرارًا مع الكائن الجديد) ماذا علي أن أفعل؟ يعلم الجميع أنه في C# يمكننا استخدام الأعضاء الثابتة. فكيف تفعل ذلك في JS؟
1.3 وضع النموذج الأولي
في JS ، يحتوي كل مُنشئ على سمة نموذج أولي ، وسيتم وراثة جميع خصائص وطرق هذا الكائن بواسطة مثيل المنشئ. بعد ذلك ، فإن إضافة الأعضاء إلى النموذج الأولي يعادل إعلان عضو ثابت في C#.
شفرة:
نسخة الكود كما يلي:
وظيفة stu (الاسم ، النتيجة) {
this.name = الاسم ،
this.score = النتيجة
}
stu.prototype.type = 'student' ؛
stu.prototype.log = function (s) {
console.log (s) ؛
}
var stu1 = New Stu ("Zhang San" ، 80) ؛
var stu2 = new Stu ("li si" ، 90) ؛
console.log (stu1.type + "/" + stu2.type) ؛ // طلاب
stu1.log ('hello') ؛ // مرحبًا
console.log (stu1.log == stu2.log) ؛ // حقيقي
هذا كل شيء عن التغليف. دعونا نلقي نظرة على كيفية تنفيذ الميراث في JS؟
2. الميراث
2.1 مُنشئ الربط
اتصل أو تطبيق الأساليب مباشرة في دالة الطفل لربط مُنشئ الكائن الأصل للكائن الطفل.
نسخة الكود كما يلي:
وظيفة stu (الاسم ، النتيجة) {
grade.apply (هذا ، الحجج) ؛
//grade.call( هذا ، الحجج) ؛
this.name = الاسم ،
this.score = النتيجة
}
وظيفة درجة () {
this.code = "STALL JUNIOR HIGHT" ؛
this.ask = function () {
console.log ("مرحبًا بالجميع") ؛
}
}
var stu1 = New Stu ("Zhang San" ، 80) ؛
var stu2 = new Stu ("li si" ، 90) ؛
console.log (stu1.code) ؛ // مدرسة جونيور الثانوية
stu1.ask () ؛ // أهلا بالجميع
يقوم التطبيق بعمل شيئين هنا ، ووضع المعلمة الأولى هذا على مُنشئ الصف (المتصل) ، ثم قم بتنفيذ الكود في الصف. يعادل تنفيذ الأعضاء المحددة في الصف مع هذا في Stu مرة أخرى.
2.2 الميراث من خلال النموذج الأولي
انظر إلى الكود أولاً
شفرة:
نسخة الكود كما يلي:
وظيفة stu (الاسم ، النتيجة) {
this.name = الاسم ،
this.score = النتيجة
}
وظيفة درجة () {
this.code = "STALL JUNIOR HIGHT" ؛
}
stu.prototype = new grade () ؛
stu.prototype.constructor = stu ؛ // منع اضطراب سلسلة الميراث وإعادة ضبط الإعلان يدويًا
var stu1 = New Stu ("Zhang San" ، 80) ؛
var stu2 = new Stu ("li si" ، 90) ؛
console.log (stu.prototype.constructor) ؛ // مُنشئ خاص
console.log (stu1.code) ؛ // مدرسة جونيور الثانوية
كما ذكرنا سابقًا ، فإن النموذج الأولي يعادل الأعضاء الثابتين في C#، لذلك نقوم بتحويل جميع أعضاء الطبقة الأم إلى أعضائهم الثابتين لتحقيق الميراث.
هناك عيب في الوراثة من خلال النموذج الأولي: جميع الأعضاء الموروثة ثابتة ، فكيف يرثون أعضاء الكائنات؟
2.3 نسخ الميراث
انسخ جميع خصائص وطرق الكائن الأصل إلى كائن الطفل لتحقيق الميراث.
شفرة:
نسخة الكود كما يلي:
وظيفة stu (الاسم ، النتيجة) {
this.name = الاسم ،
this.score = النتيجة
}
وظيفة درجة () {}
Grade.prototype.code = "Junior High School" ؛
}
// تغليف الوظيفة
تمتد الوظيفة (C ، P) {
var p = p.prototype ؛
var c = c.prototype ؛
لـ (var i in p) {
c [i] = p [i] ؛
}
}
تمديد (Stu ، الصف) ؛
var stu1 = New Stu ("Zhang San" ، 80) ؛
var stu2 = new Stu ("li si" ، 90) ؛
stu1.code = 'المدرسة الثانوية' ؛
console.log (stu1.code) ؛ // المدرسة الثانوية
console.log (STU2.Code) ؛ // مدرسة جونيور الثانوية
console.log (stu.prototype.constructor) ؛
console.log (dression.prototype.constructor)
هذا ما كتبته عن المنظمة الموجهة إلى كائن JS. هذا الشيء ليس ثابتًا. عند استخدامه ، قم بإجراء تغييرات وفقًا لاحتياجاتك. هناك مقولة تسير على ما يرام ، والمن الصحيح هو الأفضل.
يتم تحليل هذا فقط للتغليف والميراث. سنقوم ببعض المقالات الأخرى في المستقبل للسماح للأصدقاء بفهم أعمق للبرمجة الموجهة نحو جافا سكريبت. بالطبع ، كل هذا فهم شخصي. إذا كان هناك أي إغفال ، يرجى الاتصال بي.