أثناء عملية التطوير، غالبًا ما نواجه الحاجة إلى إنشاء العديد من الكائنات المتشابهة، والتي قد تحتوي على العديد من الخصائص أو الأساليب المتطابقة، فما هي الطرق التي يمكننا استخدامها لإنشاء كائنات متعددة؟ ما هي أفضل طريقة؟ دعونا نلقي نظرة معا!
تعد الطريقة الحرفية للكائن واحدة من أكثر الطرق شيوعًا لإنشاء الكائنات. خصائص الكائنات التي تم إنشاؤها في الطريقة الحرفية قابلة للكتابة والتعداد والتكوين بشكل افتراضي.
يوضح التعليمة البرمجية التالية كيفية إنشاء كائنات متعددة باستخدام الطرق الحرفية:
// إنشاء كائنات متعددة باستخدام الطرق الحرفية var person1 = { الاسم: "مربى" ، العمر: 18, العنوان: "مدينة شنغهاي"، الأكل: الوظيفة () { console.log(this.name + "الأكل") } } فار بيرسون2 = { الاسم: "توم"، العمر: 20, العنوان: "مدينة بكين"، الأكل: الوظيفة () { console.log(this.name + "الأكل") } } فار بيرسون3 = { الاسم: "التجير"، العمر: 19, العنوان: "مدينة تيانجين"، الأكل: الوظيفة () { console.log(this.name + "الأكل") } }
经过上述示例代码我们可以看出,仅仅创建了3个对象就用了24行,可以看出字面量方式的弊端:创建同样的对象时,需要编写重复的代码太多。
نمط المصنع هو في الواقع نمط تصميم شائع؛
عادةً ما يكون لدينا طريقة مصنع يمكننا من خلالها إنشاء الكائنات المطلوبة؛
يوضح الكود التالي عملية استخدام طريقة وضع المصنع لإنشاء كائنات متعددة:
// إنشاء كائنات متعددة باستخدام وظيفة وظيفة المصنع createPerson (الاسم والعمر والعنوان) ) { فار ع = {} اسم = اسم صفحة العمر = العمر عنوان = عنوان الأكل = الوظيفة () { console.log(الاسم + "الأكل") } العودة ص } var p1 = createPerson('jam', 19, 'مدينة شنغهاي') var p2 = createPerson('tom', 14, 'Beijing') var p3 = createPerson('li', 13, 'مدينة تيانجين') p3.eating() // عندما يأكل،
可以看出使用工厂模式方法创建了三个对象使用的代码明显比字面量少了好多行,but这就是最好的方式了吗?NO! NO! NO!
工厂模式方法的**弊端**就在于:以上述示例代码为例。当我们打印p1,p2,p3后,获取不到对象最真实的类型,比如p1是人还是动物还是工具
أعتقد أن الجميع على دراية بها هو - هي. ما يسمى بوظيفة المنشئ هي وظيفة توفر قالبًا لإنشاء كائن وتصف البنية الأساسية للكائن. يمكن للمنشئ إنشاء كائنات متعددة، لكل منها نفس البنية.
يوضح التعليمة البرمجية التالية استخدام طريقة المنشئ لإنشاء كائنات متعددة:
// المواصفات التقليدية، الحرف الأول من اسم المنشئ مكتوب بأحرف كبيرة function Person (name, age, title) { this.name = name this.age = age this.address = عنوان هذا.الأكل = الوظيفة () { console.log(this.name + "الأكل") } هذا.التشغيل = الوظيفة () { console.log(this.name + "قيد التشغيل") } } var p1 = شخص جديد('jam', 20, 'Beijing') var p2 = شخص جديد('tom', 14, 'مدينة شنغهاي') var p3 = شخص جديد('li', 13, 'مدينة تيانجين') console.log (ص 1) // نتائج الإخراج // الشخص { // الاسم: "مربى"، // العمر: 20، // العنوان: "بكين"، // الأكل: [وظيفة]، // التشغيل: [الوظيفة] // } p1.eating() //
构造函数有个不成文的规范,那就是构造函数的名字首字母大写或者驼峰。
构造函数方式并不是最完美的创建多个对象的方式,也是有缺点的。
缺点:每个方法都要在每个实例上重新创建一遍,比如同样的eating方法和running方法都需要在p1,p2,p3的实例上去创建一遍,浪费很多的内存空间
هو تحديد سمات المثيل على المُنشئ، ثم يجب تمرير هذه المعلمات فقط عند إنشاء الكائن. يتم استخدام كائن النموذج الأولي لتحديد الأساليب والخصائص المشتركة.
يوضح التعليمة البرمجية التالية كيفية إنشاء كائنات متعددة باستخدام النماذج الأولية والمنشئات:
function Person (name, age, title) { this.name = name this.age = age this.address = عنوان this.eating = هذا.التشغيل = الوظيفة () { console.log(this.name + "قيد التشغيل") } } // أضف طريقة الأكل وطريقة التشغيل إلى النموذج الأولي، لذلك لا تحتاج إلى إضافة نفس الطريقة في الذاكرة في كل مرة تقوم فيها بإنشاء كائن. console.log(this.name + "الأكل") } Person.prototype.running = الوظيفة () { console.log(this.name + "قيد التشغيل") } var p1 = شخص جديد('jam', 20, 'Beijing') var p2 = شخص جديد('tom', 14, 'مدينة شنغهاي') var p3 = شخص جديد('li', 13, 'مدينة تيانجين') console.log (ص 1) // نتيجة الإخراج: // شخص { // الاسم: "مربى"، // العمر: 20، // العنوان: "بكين"، // الأكل: [وظيفة]، // التشغيل: [الوظيفة] // } p1.eating() //
最后的当然是压轴的呀,这种原型和构造函数方式是目前在ECMAScript中使用得最广泛、认同度最高的一种创建对象的方法。