هناك عدة طرق شائعة لتحديد الفئات أو الكائنات في JavaScript: نهج المصنع
وظيفة createCar(اللون، الأبواب، ميلا في الغالون) {
var tempCar = new Object;
tempCar.color = color;
tempCar.doors = الأبواب؛
tempCar.mpg = mpg;
tempCar.showColor = الوظيفة (){
تنبيه ( هذا اللون)؛
};
إرجاع درجة الحرارة؛
}
var car1 = createCar("red", 4, 23);
var car2 = createCar("blue", 3, 25);
car1.showColor();
car2.showColor();
تم تحديد وظيفة مصنع يمكنها إنشاء وإرجاع كائنات من نوع معين، وهي تبدو جيدة، ولكن هناك مشكلة صغيرة، ويجب إنشاء وظيفة showColor جديدة في كل مرة يتم استدعاؤها. وظيفة عرض اللون () { تنبيه (هذا. اللون)؛ } أشر إليها مباشرة في وظيفة المصنع tempCar.showColor = showColor; يؤدي هذا إلى تجنب مشكلة إنشاء الوظائف بشكل متكرر، لكنه لا يبدو كأسلوب كائن. وضع المنشئ
وظيفة السيارة (sColor، iDoors، iMpg) {
هذا .color = sColor;
this .doors = iDoors;
هذا .mpg = iMpg;
هذا .showColor = الوظيفة (){
تنبيه ( هذا اللون)؛
};
}
var car1 = new Car("red", 4, 23);
var car2 = new Car("blue", 3, 25);
car1.showColor();
car2.showColor();
يمكنك رؤية الفرق من الطريقة الأولى. لا يوجد كائن تم إنشاؤه داخل المُنشئ، ولكن يتم استخدام الكلمة الأساسية this. عند استدعاء المُنشئ باستخدام new، يتم إنشاء الكائن أولاً ثم الوصول إليه باستخدام هذا. هذا الاستخدام مشابه جدًا للغات كائنية التوجه الأخرى، لكن هذه الطريقة بها نفس مشكلة الطريقة السابقة، وهي إنشاء الوظائف بشكل متكرر. نهج منشئ / نموذج أولي هجين للبناء
تستخدم هذه الطريقة طريقة المُنشئ وطريقة النموذج الأولي في نفس الوقت، ومن خلال الجمع بين مزاياهما، تم تقديم طريقة المُنشئ من قبل. وظيفة السيارة () {
}
Car.prototype.color = "أحمر";
Car.prototype.doors = 4؛
Car.prototype.mpg = 23;
Car.prototype.showColor = الوظيفة (){
تنبيه ( هذا اللون)؛
};
var car1 = new Car();
var car2 = new Car();
أولاً، يتم تعريف السيارة المُنشئة بدون أي كود، ومن ثم يتم إضافة الخصائص من خلال النموذج الأولي ميزة: أ. تقوم جميع المثيلات بتخزين المؤشرات لإظهار اللون، مما يحل مشكلة إنشاء الوظائف بشكل متكرر. ب. يمكنك استخدام مثيل للتحقق من نوع الكائن تنبيه (مثيل السيارة 1) // صحيح من السلبيات أضف الكود التالي:
Car.prototype.drivers = new Array("mike"، "sue");
car1.drivers.push("مات");
تنبيه (car1.drivers)؛ // مخرجات "مايك، سو، مات"
تنبيه (car2.drivers)؛ // مخرجات "مايك، سو، مات"
تعد برامج التشغيل مؤشرات إلى كائنات الصفيف، ويشير كلا مثيلي Car إلى نفس الصفيف.
لنستخدم طريقة الخلط التالية: وظيفة السيارة (sColor، iDoors، iMpg) {
هذا .color = sColor;
this .doors = iDoors;
هذا .mpg = iMpg;
this .drivers = new Array("mike", "sue");
}
Car.prototype.showColor = الوظيفة (){
تنبيه ( هذا اللون)؛
};
var car1 = new Car("red", 4, 23);
var car2 = new Car("blue", 3, 25);
car1.drivers.push("مات");
تنبيه (car1.drivers)؛
تنبيه (car2.drivers)؛
بهذه الطريقة لا توجد مشكلة، ويمكنك أيضًا استخدام المثيل النماذج الأولية الديناميكية
وظيفة السيارة (sColor، iDoors، iMpg) {
هذا .color = sColor;
this .doors = iDoors;
هذا .mpg = iMpg;
this .drivers = new Array("mike", "sue");
إذا ( نوع السيارة.التهيئة == "غير محدد"){
Car.prototype.showColor = الوظيفة (){
تنبيه ( هذا اللون)؛
};
Car.initialized = صحيح ؛
}
}
var car1 = new Car("red", 4, 23);
var car2 = new Car("blue", 3, 25);
car1.drivers.push("مات");
تنبيه (car1.drivers)؛
تنبيه (car2.drivers)؛
هذه الطريقة هي المفضلة لدي. يتم إكمال جميع تعريفات الفئات في إحدى الوظائف. ويبدو أن تعريفات الفئات في اللغات الأخرى لن يتم إنشاؤها بشكل متكرر