طريقة مصنع جافا سكريبت طريقة بدائية
نظرًا لأنه يمكن تعريف خصائص الكائن ديناميكيًا بعد إنشاء الكائن، فقد تمت كتابة تعليمات برمجية مشابهة لما يلي عند تقديم JavaScript لأول مرة.
انسخ رمز الكود كما يلي:
var oCar = new Object;
oCar.color = "أزرق";
oCar.doors = 4;
oCar.mpg = 25;
oCar.showColor = وظيفة () {
تنبيه (هذا. اللون)؛
};
في الكود أعلاه، تم إنشاء سيارة الكائن. ثم أعطها بعض السمات: إنها زرقاء، ولها أربعة أبواب، وتقطع 25 ميلاً للغالون الواحد. السمة الأخيرة هي في الواقع مؤشر إلى دالة، مما يعني أن السمة هي طريقة. بعد تنفيذ هذا الكود، يمكن استخدام سيارة الكائن. ولكن هناك مشكلة هنا، وهي أنك قد تحتاج إلى إنشاء مثيلات متعددة للسيارة، ومن الواضح أن هذه ليست طريقة جيدة.
الحل: طرق المصنع
لحل هذه المشكلة، أنشأ المطورون وظائف المصنع التي تقوم بإنشاء وإرجاع كائنات من نوع معين. على سبيل المثال، يمكن استخدام الدالة createCar() لتغليف العمليات المدرجة مسبقًا لإنشاء كائن سيارة:
انسخ رمز الكود كما يلي:
وظيفة createCar(sColor,iDoors,iMpg) {
var oTempCar = new Object;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = function() {
تنبيه (هذا. اللون)؛
};
إرجاع oTempCar;
}
var oCar1 = createCar("red",4,23);
var oCar2 = createCar("blue",3,25);
oCar1.showColor(); // الإخراج "أحمر"
oCar2.showColor(); //الإخراج "أزرق"
سيؤدي استدعاء وظيفة المصنع إلى إنشاء كائن جديد ومنحه جميع السمات الضرورية. أضف معلمات إلى وظيفة createCar () لتعيين قيم للون والأبواب وسمات ميلا في الغالون لكائن السيارة المراد إنشاؤه. وهذا يجعل كائنين لهما نفس الخصائص، ولكن قيم الخصائص مختلفة. الشيء السيئ في هذه الطريقة هو أنه في كل مرة يتم فيها إنشاء كائن سيارة (أي يتم استدعاء وظيفة createCar مرة واحدة)، يتم إنشاء طريقة showColor بشكل متكرر لكل كائن، وهذا ليس ضروريًا في الواقع، كل كائن يشترك في نفس الشيء وظيفة. . لذلك نحاول الإعلان عن سمات أسلوبها خارج الوظيفة.
تحديد أساليب الكائن خارج وظائف المصنع
يتجنب بعض المطورين هذه المشكلة عن طريق تحديد طريقة الكائن خارج وظيفة المصنع ثم الإشارة إلى الطريقة من خلال خاصية:
انسخ رمز الكود كما يلي:
وظيفة إظهار اللون () {
تنبيه (هذا. اللون)؛
}
وظيفة createCar(sColor,iDoors,iMpg) {
var oTempCar = new Object;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = showColor;
إرجاع oTempCar;
}
var oCar1 = createCar("red",4,23);
var oCar2 = createCar("blue",3,25);
oCar1.showColor(); // الإخراج "أحمر"
oCar2.showColor(); //الإخراج "أزرق"
في الكود المعاد كتابته أعلاه، تم تعريف الدالة showColor() قبل الدالة createCar(). داخل createCar()، يُعطى الكائن مؤشرًا إلى الدالة showColor() الموجودة. من الناحية الوظيفية، يؤدي هذا إلى حل مشكلة إنشاء كائنات دالة بشكل متكرر، ولكن من الناحية الدلالية، لا تبدو الوظيفة كطريقة للكائن.