في JavaScript ، يمكن استخدام الفصل لتنفيذ البرمجة الموجهة للكائنات. ومع ذلك ، تختلف الفصول الدراسية في JavaScript عن تلك الموجودة في Java ، وتختلف تعريفاتها واستخداماتها المقابلة.
تعريف الفصول في JavaScript
في JavaScript ، تشكل جميع الكائنات المستمدة من نفس كائن النموذج الأولي (النموذج الأولي) فئة ؛ أي أن الفصول الدراسية في JavaScript هي مفاهيم لجمع الكائنات. إذا كان للكائنين نفس النموذج الأولي ، فإنهما ينتمون إلى نفس الفصل ؛ الفصول في JavaScript لا تحتاج حتى إلى أسماء فصول. الرمز التالي مثال:
نسخة الكود كما يلي:
var p = {x: 42} ؛
var a = object.create (p) ؛
var b = object.create (p) ؛
console.log (a === b) ؛ // false
console.log (object.getPrototypeof (a) === object.getPrototypeof (b)) ؛ // true
في المثال أعلاه ، يتمتع الكائنات A و B بنفس كائن النموذج الأولي (النموذج الأولي) P ، لذلك ينتمي A و B إلى نفس الفئة (على الرغم من أن أيا من هذه الفئة لديه اسم فئة) ، ويرثون الخاصية X بقيمة 42 من كائن النموذج الأولي p.
من هذا المثال ، يمكننا أن نرى أن وظيفة كائن النموذج الأولي تعادل قالبًا ، ويمكن إنشاء كائنات متعددة/إنشاء منها. حالتها هي نفسها من رمز الفصل في لغة Java وهي جوهر تعريف الفئة في JavaScript. سيظهر كائن النموذج الأولي في المثال التالي مثل رمز الفصل:
نسخة الكود كما يلي:
var p = {
vechrement_by: 1 ،
الزيادة: وظيفة (x) {
إرجاع x + this.increment_by ؛
}
}
var a = object.create (p) ؛
var b = object.create (p) ؛
console.log (A.Increment (7)) ؛ // 8
console.log (B.increment (9)) ؛ // 10
في المثال أعلاه ، يعرّف كائن النموذج الأولي P خاصية (zerrement_by) بقيمة 1 ودالة تسمى الزيادة ؛ الكائنات A و B الحصول على وظائف Grantrement_by وزيادة من القالب ص. عند استدعاء وظيفة الزيادة للكائن A أو B ، ستحاول JavaScript الحصول على قيمة vechrement_by لـ A أو B (this.increment_by) ؛ نظرًا لأنه يتم الحصول على Quotrement_by من P ، فإن قيمه كلها متغيرات واحدة مع نفس القيم ، على غرار متغيرات الفئة الثابتة في Java. لذلك ، في المثال أعلاه ، يتم استخدام جميع أحرف رأس المال عند تسمية متغير vechrement_by.
في المثال أعلاه ، جميع الكائنات التي تم إنشاؤها من القالب P (الكائنات التي تنتمي إلى نفس الفئة) لها نفس الخصائص والسلوك. ولكن في الواقع ، بالنسبة للكائنات المختلفة من نفس الفئة ، بالإضافة إلى وجود سمات/سلوكيات محددة بواسطة الفصل ، غالبًا ما يكون لها بعض السمات والسلوكيات الفريدة. لذلك ، إذا كنت بحاجة إلى استخدام قالب النموذج الأولي كفئة ، فيجب عليك تخصيص كل كائن مشتق منه:
نسخة الكود كما يلي:
var p = {
vechrement_by: 1 ،
الزيادة: وظيفة (x) {
إرجاع x + this.increment_by + this.custom_increment_by ؛
}
}
var a = object.create (p) ؛
var b = object.create (p) ؛
a.custom_increment_by = 0 ؛
B.CUSTOM_INCREMENT_BY = 1 ؛
console.log (A.Increment (7)) ؛ // 8
console.log (B.increment (9)) ؛ // 11
في هذا المثال ، يحتوي الكائنات A و B التي تم إنشاؤها من القالب P على Custom_increment_by المتغيرة التي لا تساوي قيمها بالضرورة بعضها البعض ، والنتيجة النهائية لسلوك وظيفة الزيادة () مرتبطة بقيمة Custom_increment_by. بشكل عام ، غالبًا ما يتم تنفيذ عمل تخصيص كائنات جديدة في وظيفة موحدة:
نسخة الكود كما يلي:
var p = {
vechrement_by: 1 ،
الزيادة: وظيفة (x) {
إرجاع x + this.increment_by + this.custom_increment_by ؛
}
}
وظيفة getIncrementalClassObject (customincrementByValue) {
var gutrementalobj = object.create (p) ؛
GENERMENTALOBJ.CUSTOM_INCREMENT_BY = customincrementByValue ؛
إرجاع GUYREMENTALOBJ ؛
}
var a = getIncrementalClassObject (0) ؛
var b = getIncrementalClassObject (1) ؛
console.log (A.Increment (7)) ؛ // 8
console.log (B.increment (9)) ؛ // 11
وبهذه الطريقة ، يتم الانتهاء من تعريف الفئة من خلال كائن النموذج الأولي P و GetIncrementalClassObject (): كائنات النموذج الأولي الذي يمكن الحصول على كائنات النموذج P. تجدر الإشارة إلى أن هذه الفئة المحددة لا تحتوي على اسم الفصل في هذا الوقت. من أجل الوصف ، سوف يطلق عليه تدريجي.
إذا نظرنا إلى الوراء إلى العمل المنجز في وظيفة getIncrementalClassObject () ، يمكنك أن ترى أن عملية إنشاء كائن جديد من الفئة الإضافية هي كما يلي:
1. إنشاء كائن فارغ وتحديد كائن النموذج الأولي الخاص به على أنه ص.
2. تخصيص هذا الكائن الفارغ الذي تم إنشاؤه حديثًا وفقًا لقيم المعلمات المختلفة.
3. إرجاع كائن جديد تم تخصيصه.
في JavaScript ، يمكنك إكمال تعريف الفصل بسرعة وإنشاء كائنات جديدة باستخدام المنشئ.
مُنشئ (مُنشئ) في جافا سكريبت
من مثال الفئة الإضافية أعلاه ، يمكننا أن نرى أن تحديد فئة جديدة يتطلب جزأين من التعليمات البرمجية: إنشاء كائن نموذج أولي كقالب ، وإنشاء وظيفة مخصصة لتهيئة الكائن الجديد ؛ يمر إنشاء كائن جديد من فئة من ثلاث عمليات: تحديد كائن النموذج الأولي للكائن الجديد ، وتخصيص/تهيئة الكائن الجديد ، وإرجاع هذا الكائن الجديد. في JavaScript ، كل هذا يمكن القيام به من خلال المنشئ (مُنشئ).
المُنشئ في JavaScript هو دالة تتحمل مسؤولية تهيئة كائن جديد ؛ يتم استخدام النموذج الأولي لوظيفة المنشئ كقالب لإنشاء كائن جديد. أخذ الفئة الإضافية أعلاه كمثال ، بعد استخدام مُنشئ لإعادة كتابة الرمز ، يبدو الأمر كذلك:
نسخة الكود كما يلي:
وظيفة تدريجية (customincrementByValue) {
this.custom_increment_by = customincrementByValue ؛
}
Gutremental.prototype = {
vechrement_by: 1 ،
الزيادة: وظيفة (x) {
إرجاع x + this.increment_by + this.custom_increment_by ؛
}
}
var a = New Gutremental (0) ؛
var b = New Gutremental (1) ؛
console.log (A.Increment (7)) ؛ // 8
console.log (B.increment (9)) ؛ // 11
تمر عملية إنشاء كائن جديد باستخدام وظيفة المنشئ من خلال الكلمة الرئيسية الجديدة بالفعل عبر المراحل التالية:
إنشاء كائن فارغ جديد.
1. أشر كائن النموذج الأولي لهذا الكائن إلى خاصية النموذج الأولي لوظيفة المنشئ.
2. استخدم هذا الكائن مثل هذه المعلمة وتنفيذ وظيفة المنشئ.
3. هذا هو نفس الشيء الذي تم القيام به في وظيفة getIncrementAlclassObject ().
اسم الفصل
عند إنشاء كائن باستخدام مُنشئ ، يحتوي الكائن المقابل على "اسم فئة" ، والذي يمكن التحقق منه من نتيجة عامل التشغيل:
نسخة الكود كما يلي:
console.log (مثيل من التزايدي) ؛ // صحيح
console.log (b extremof gutremental) ؛ // true
ومع ذلك ، لا يحدد مشغل مثيل ما إذا كان الكائن يتم إنشاؤه بواسطة المنشئ الإضافي. يحدد مشغل مثيل فقط ما إذا كان كائن النموذج الأولي للكائن تدريجيًا. عندما يكون هناك مُنشئان لهما نفس النموذج الأولي ، سيعود مشغل مثيل OF بشكل موحد دون تمييز أي مُنشئ يتم استخدامه لإنشاء الكائن.
نسخة الكود كما يلي:
وظيفة GUYREMENTAL2 (customincrementByValue) {
this.custom_increment_by = customincrementByValue + 3 ؛
}
Gutremental2.prototype = Gutremental.prototype ؛
console.log (مثيل من GUYSMENTAL2) ؛ // صحيح