نحن نعلم أنه في JS ، لا يوجد مفهوم للطبقة. جميع كائنات المثيل لفئة ترث سمات من نفس كائن النموذج الأولي ، وبالتالي فإن كائن النموذج الأولي هو جوهر الفئة.
الفئة هي تجريد للكائن ، والكائن هو مثيل ملموس لفئة ما. الفصول الدراسية مجردة ولا تشغل الذاكرة ، في حين أن الكائنات ملموسة وتشغل مساحة تخزين. --- موسوعة بايدو
كانت متطلبات JavaScript المبكرة بسيطة للغاية ، وكتبت بشكل أساسي كوظائف ، تليها الكتابة الموجهة نحو العملية. في وقت لاحق ، تم تقديم أفكار التنمية الموجهة نحو الكائن تدريجياً ، ثم كتبت ببطء إلى فصول.
في JS ، فإن جوهر الكتابة في الفصل هو في الأساس مُنشئ + نموذج أولي. أدناه ، دعونا نناقش عدة طرق لكتابة فصل JS:
طريقة المنشئ
/*** فئة الشخص: تحديد شخص ، مع سمة الاسم وطريقة getName*/<script> person (name) {this.name = name ؛ this.getName = function () {return this.name ؛ }} // نؤسس عدة كائنات هنا var p1 = شخص جديد ("trigkit4") ؛ var p2 = شخص جديد ("مايك") ؛ console.log (p1 مثيل الشخص)من إخراج وحدة التحكم أعلاه ، يمكننا أن نرى أن p1 و p2 هي في الواقع كائنات مثيل لفئة الشخص. على الجانب الأيسر من مشغل مثيل OF هو كائن الفئة المراد اكتشافها ، وعلى الجانب الأيمن هو مُنشئ الفئة التي تحدد الفئة. هنا ، يتم استخدام extryof لاكتشاف ما إذا كان الكائن P1 ينتمي إلى فئة الشخص.
ميزة هذه الطريقة هي أنه يمكننا بناء مثيلات كائن مختلفة وفقًا للمعلمات. العيب هو أنه في كل مرة نبني فيها كائن المثيل ، سيتم إنشاء طريقة getName ، مما يؤدي إلى نفايات الذاكرة.
يمكننا استخدام وظيفة خارجية بدلاً من طرق الفصل ، بحيث يشارك كل كائن نفس الطريقة. الفصل المعاد كتابته كما يلي:
// الوظيفة الخارجية <script> function getName () {return this.name ؛ } وظيفة الشخص (الاسم) {this.name = name ؛ this.getName = getName ؛ //} </script>طريقة النموذج الأولي
<script> function person () {} ؛ person.prototype.name = "trigkit4" ؛ // يتم وضع خصائص الفصل على النموذج الأولي person.prototype.getName = function () {return "أنا" + this.name ؛ } var p1 = new person () ؛ var p2 = شخص جديد () ؛ console.log (p1.name) ؛ // trigkit4 console.log (p2.getName ()) ؛ // أنا trigkit4 </script>عيب طريقة النموذج الأولي هو أنه لا يمكن إنشاء مثيل الكائن من خلال المعلمات (عمومًا تختلف خصائص كل كائن). الميزة هي أن جميع مثيلات الكائن تشترك في طريقة getName (نسبة إلى طريقة المنشئ) ، ولا توجد نفايات ذاكرة.
مُنشئ + نموذج أولي
خذ مزايا الأولين:
أ. استخدم مُنشئًا لتحديد سمات الفصل (الحقول).
ب. استخدم النموذج الأولي لتحديد طريقة الفصل.
<script> function person (name) {this.name = name ؛ } // تتيح ميزة النموذج الأولي مثيلات الكائن بمشاركة طريقة getName person.prototype.getName = function () {return "ii" + this.name ؛ } </script>وبهذه الطريقة ، يمكننا بناء كائنات ذات سمات مختلفة ، والسماح لمثيلات الكائن بمشاركة الأساليب دون التسبب في نفايات الذاكرة.
من أجل جعل رمز JS أكثر إحكاما ، قمنا بنقل رمز طريقة النموذج الأولي إلى أقواس شخص الوظيفة.
<script> function person (name) {this.name = name ؛ person.prototype.getName = function () {return name ؛ // this.name غير مناسب}} var p1 = شخص جديد ('trigkit4') ؛ console.log (p1.getName ()) ؛ // trigkit4 </script>هنا ، نحتاج إلى معرفة عدة طرق لتحديد الفصول ، بالإضافة إلى المُنشئ أعلاه ، هناك أيضًا:
Object.Create () طريقة
مع هذه الطريقة ، "الفئة" هو كائن ، وليس وظيفة.
var person = {name: "trigkit4" ، العمر: 21 ، Run: function () {Alert ("I Live Running") ؛ }}ثم ، استخدم Object.create () مباشرة لإنشاء مثيل دون استخدام جديد.
var p1 = object.create (شخص) ؛ تنبيه (p1.age) ؛ // 21 p1.run () ؛ // أحب التشغيل
هذه الطريقة أبسط من "طريقة المنشئ" ، لكنها لا تستطيع تنفيذ سمات خاصة وطرق خاصة ، ولا يمكن مشاركة البيانات بين كائنات المثيل ، وبالتالي فإن محاكاة "الفئات" ليست شاملة بما فيه الكفاية.
طريقة CreateNew ()
هذه الطريقة لا تتطلب هذا والنموذج الأولي. إنه استخدام الكائنات لمحاكاة فئة ، ثم تحديد مُنشئ CreateNew () في الفصل ، ثم تحديد كائن مثيل في CreateNew () ، واستخدم كائن المثيل هذا كقيمة الإرجاع.
<script> var person = {createNew: function () {var person = {} ؛ person.name = "trigkit4" ؛ person.run = function () {Alert ("أحب التشغيل") ؛ } ؛ عودة الشخص }} </script>عند استخدامه ، اتصل بالطريقة CreateNew () للحصول على كائن المثيل.
var p1 = person.createNew () ؛ p1.run () ؛ // أحب الجري
تتشابه طريقة الكتابة هذه في الواقع إلى حد كبير لطريقة الكتابة للحرفية الكائنات ، باستثناء أن طريقة مفصولة بواسطة الفاصلة والآخر مفصولة بواسطة Semicolon.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.