يختلف المنشئون في JavaScript أيضًا عن اللغات الأخرى. أي وظيفة تسمى من خلال الكلمة الرئيسية الجديدة يمكن اعتبارها مُنشئًا.
داخل جسم المنشئ ، يشير هذا إلى الكائن الذي تم إنشاؤه حديثًا. إذا لم يكن هناك تعبير إرجاع يتم عرضه في جسم المنشئ ، فسنقوم بإرجاع هذا بشكل افتراضي ، أي الكائن الذي تم إنشاؤه حديثًا.
نسخة الكود كما يلي:
وظيفة foo () {
this.bla = 1 ؛
}
foo.prototype.test = function () {
console.log (this.bla) ؛
} ؛
var test = new foo () ؛
يستدعي الكود أعلاه FOO كمؤسس ويشير إلى النموذج الأولي للكائن الذي تم إنشاؤه حديثًا (__proto__) إلى النمط foo.protype.
إذا حددنا التعبير الذي تم إرجاعه في المُنشئ ، فسيقوم المُنشئ بإرجاع التعبير بأكمله ، ولكن يجب أن يكون تعبير الإرجاع هذا كائنًا.
نسخة الكود كما يلي:
شريط الدالة () {
العودة 2 ؛
}
شريط جديد () ؛ // كائن جديد
اختبار الوظيفة () {
this.value = 2 ؛
يعود {
فو: 1
} ؛
}
اختبار جديد () ؛ // الكائن الذي تم إرجاعه
إذا تم حذف جديد ، فلن تتمكن الوظيفة من إرجاع كائن جديد.
نسخة الكود كما يلي:
وظيفة foo () {
this.bla = 1 ؛ // يتم تعيينها على الكائن العالمي
}
foo () ؛ // غير محدد
قد يعمل المثال أعلاه أيضًا في بعض السيناريوهات ، ولكن بسبب آلية العمل في هذا في JavaScript ، سيشير هذا إلى الكائن العالمي هنا.
نموذج المصنع
من أجل أن تكون قادرًا على استخدام الكلمة الرئيسية الجديدة ، سيتعين على المُنشئ عرض قيمة الإرجاع.
نسخة الكود كما يلي:
شريط الدالة () {
var value = 1 ؛
يعود {
الطريقة: الدالة () {
قيمة الإرجاع
}
}
}
bar.prototype = {
foo: function () {}
} ؛
شريط جديد () ؛
حاجِز()؛
في المثال أعلاه ، فإن تأثير استدعاء شريط الوظائف دون استخدام جديد هو نفسه ، وسيتم إرجاع كائن تم إنشاؤه حديثًا يحتوي على طريقة الطريقة ، وهو في الواقع إغلاق.
شيء واحد يجب ملاحظته هنا هو أن New Bar () لن يرجع شريط النمط. ولكن بدلاً من ذلك سيكون كائنًا أوليًا لطريقة الوظيفة داخل تعبير الإرجاع.
في المثال أعلاه ، لا يوجد فرق في الوظيفة بين استخدام جديد أم لا.
إنشاء كائنات جديدة من خلال وضع المصنع
غالبًا ما يتم تذكيرنا بعدم استخدام جديد لأنه بمجرد أن تنسى استخدامه ، فإنه سيؤدي إلى أخطاء.
لإنشاء كائن ، نفضل استخدام نمط المصنع وبناء كائن جديد داخل نمط المصنع.
نسخة الكود كما يلي:
وظيفة foo () {
var obj = {} ؛
obj.value = 'blub' ؛
var private = 2 ؛
obj.somemethod = function (value) {
this.value = القيمة ؛
}
obj.getPrivate = function () {
العودة الخاصة
}
إرجاع OBJ ؛
}
على الرغم من أن رمز المثال أعلاه أقل عرضة للأخطاء من استخدام جديد وسيكون أكثر ملاءمة عند استخدام المتغيرات الخاصة ، إلا أن هناك بعض العيوب:
لأنه لا يمكن مشاركة كائنات النموذج الأولي ، يلزم المزيد من الذاكرة.
لتحقيق الميراث ، يتطلب نمط المصنع نسخ جميع طرق كائن آخر أو استخدامه كنموذج أولي لكائن جديد.
التخلي عن سلسلة النموذج الأولي هو مجرد تجنب استخدام جديد ، والذي يبدو أنه مخالف لروح لغة JavaScript.
لخص
على الرغم من أن استخدام جديد قد يكون أكثر عرضة للأخطاء ، إلا أن هذا ليس سببًا للتخلي عن استخدام سلاسل النموذج الأولي. بالنسبة إلى الطريقة التي يجب اتخاذها في النهاية ، فإن ذلك يعتمد على احتياجات التطبيق. أفضل طريقة هي اختيار نمط والتمسك به.
ببساطة ، المُنشئ هو تهيئة كائن مثيل ، ويرث خاصية النموذج الأولي للكائن كائن مثيل.